#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, оболочка:
- создает
file
, если оно не существует, - открывает его и
- присваивает дескриптор стандартному значению
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 и перенаправление в сценарий оболочки.