Большинство людей скажет Вам, что переполнение стека происходит с рекурсией без пути выхода - в то время как главным образом верный, если Вы будете работать с достаточно большими структурами данных, даже надлежащий путь выхода рекурсии не поможет Вам.
опции Some в этом случае:
Проще говоря:
import sys
# parse command line
if file_name_given:
inf = open(file_name_given)
else:
inf = sys.stdin
На этом этапе вы должны использовать inf
для чтения из файла. В зависимости от того, было ли указано имя файла, оно будет считываться из данного файла или из стандартного ввода.
Когда вам нужно закрыть файл, вы можете сделать следующее:
if inf is not sys.stdin:
inf.close()
Однако в большинстве случаев закрыть sys.stdin
, если вы закончили с ним.
Модуль fileinput может делать то, что вы хотите - при условии, что аргументы, не являющиеся опциями, находятся в args
, затем:
import fileinput
for line in fileinput.input(args):
print line
Если args
пусто, то входной файл . input ()
будет читать из stdin; в противном случае он читает из каждого файла по очереди, аналогично Perl while (<>)
.
Что-то вроде:
if input_from_file:
f = open(file_name, "rt")
else:
f = sys.stdin
inL = f.readline()
while inL:
print inL.rstrip()
inL = f.readline()