Извлечь имя файла после ‘>’ из командной строки в python

#python #command-line

#python #командная строка

Вопрос:

Как я могу извлечь имя файла после знака ‘>’ из командной строки в python. Например:

питон func.py -f file1.txt -с > output.txt

Я хочу получить имя выходного файла ‘output.txt «из приведенной выше командной строки.

Спасибо

Комментарии:

1. Как вы получаете командную строку? Это строка? Кто-нибудь вставляет его?

2. Эта информация недоступна для Python.

3. Python никогда не видит эту часть командной строки; оболочка интерпретирует ее как перенаправление вывода. Все, что вам нужно сделать в вашем коде, это обычный print() s, или sys.stdout.write() , и он автоматически перейдет к указанному файлу.

4. Если вы хотите иметь возможность переключаться между стандартным выводом и выводом в текстовый файл, вы можете посмотреть перенаправление с Python вместо использования> dzone.com/articles/python-101-redirecting-stdout

5. Это звучит как проблема XY. Зачем вам это нужно?

Ответ №1:

Вы не можете.

Когда вы пишете что-то подобное command > file в shell, оболочка:

  1. создает file , если оно не существует,
  2. открывает его и
  3. присваивает дескриптор стандартному значению command .

Вызываемый процесс (и не имеет значения, Python это или что-то еще) не знает, что происходит с данными после их записи, потому что он видит только дескриптор, предоставленный оболочкой. Это немного похоже на то, что у вас есть один конец действительно длинного канала: вы знаете, что можете вставлять материал, но вы не можете видеть, что происходит с ним на другом конце.

Если вы хотите получить имя файла в этом вызове, вам необходимо либо:

  • передайте его в свою программу на Python в качестве аргумента и обработайте перенаправление из Python, например python func.py -f file1.txt -c output.txt , или
  • выведите его из оболочки, например echo 'output.txt'; python func.py -f file1.txt -c > output.txt

Комментарии:

1. Проблема в том, что пользователь может либо ввести: ‘python func.py -f file1.txt -к -о output.txt ‘ или ‘python func.py -f file1.txt -с > output.txt «. Первый случай прост, но проблема во втором.

2. @AnNguyen Да? Я рассмотрел второй случай в своем ответе.

3. Я не думаю, что это имеет смысл, потому что пользователь не будет вводить ‘echo’output.txt »

4. Вы можете обернуть вызов python и перенаправление в сценарий оболочки.