Я хочу, чтобы мой код мог принимать входные данные из файла И stdin. Какую конструкцию сделать?
Я имею в виду унифицирующую конструкцию, которая подразумевает
file1 = sys.stdin
и
file1 = fileinput.input(sys.argv[1])
"Унифицирующая конструкция" звучит так, будто вы хотите иметь доступ к файлу, предоставленному в качестве аргумента, или sys.stdin
через одну переменную, поэтому вы можете просто сказать функции, чтобы получить строку от этой вещи. К счастью, sys.stdin
- это еще один объект File, поэтому у вас есть точно такая же функциональность с обоими, и это так же просто, как блок try/except:
try: from sys import argv file1 = open(argv[1]) except: from sys import stdin file1 = stdin
Вы получите sys.stdin
, если argv [1] вне диапазона (IndexError) или не может быть открыт (IOError).
Если вы просто хотите объединить два, используйте file1 = sys.argv[1].open().read() + sys.stdin.read()
import fileinput
for line in fileinput.input():
print line
This iterates over the lines of all files listed in sys.argv[1:], defaulting to sys.stdin if the list is empty. If a filename is '-', it is also replaced by sys.stdin.
- docs.python.org/2/library/fileinput.html