Python читается из аргументов командной строки или стандартного ввода

При написании текстовых программ командной строки на Python я часто хочу прочитать либо все файлы, переданные в командной строке, либо (XOR) стандартный ввод (как это делает Unix cat или Perl <>). Итак, я говорю

if len(args) == 0:  # result from optparse
    input = sys.stdin
else:
    input = itertools.chain(*(open(a) for a in args))

Это питоновский способ сделать это, или я пропустил какую-то часть библиотеки?


person Fred Foo    schedule 15.04.2011    source источник
comment
возможный дубликат Как вы читаете со стандартного ввода в python   -  person Andreas Jung    schedule 15.04.2011
comment
Дублировать stackoverflow.com /вопросы/1450393/   -  person Andreas Jung    schedule 15.04.2011
comment
Это не дубликат. Этот вопрос касается необязательного чтения из stdin.   -  person Michael Scheper    schedule 07.06.2014


Ответы (3)


Вам потребуется ввод файла.

Стандартный вариант использования:

import fileinput
for line in fileinput.input():
  process(line)
person eumiro    schedule 15.04.2011
comment
Это нормально, если вы хотите прочитать файл построчно, но если вы просто хотите, чтобы все содержимое файла было в переменной (эквивалент open("", 'r').read()), нет встроенного способа сделать это с помощью модуля fileinput stdlib. Если я не ошибаюсь, читая документы. - person tehwalrus; 25.05.2017
comment
@tehwalrus Я работал над этим, используя allText="" перед циклом for и allText += line в нем. - person AstroFloyd; 21.05.2020
comment
Вы правы насчет отсутствия метода read(). Однако для объединения строк сложение строк официально не рекомендуется. Гораздо эффективнее собрать их в список, а затем соединить с помощью "".join(lines) — это официально рекомендуемый метод. - person Eric O Lebigot; 08.03.2021

Видеть

Как вы читаете со стандартного ввода в Python?

person Andreas Jung    schedule 15.04.2011
comment
Определенно стоит перейти по этой ссылке, если вам нужны более подробные ответы. Например, есть предостережение для Python 2. - person Michael Scheper; 07.06.2014

В Python 3 argparse очень хорошо обрабатывает объекты типов файлов. Это чрезвычайно мощный модуль, и документация содержит множество примеров, так что вы легко сможете быстро написать нужный код. (Как питонично!)

Вы также можете воспользоваться этим вопросом StackOverflow об использовании argparse для необязательного чтения из стандартного ввода .

person Michael Scheper    schedule 06.06.2014