Универсальная конструкция для STDIN и Fileinput в коде Python - PullRequest
1 голос
/ 01 марта 2010

Я хочу, чтобы мой код мог принимать входные данные из файла и стандартного ввода.Какая конструкция для этого?

Я имею в виду объединяющую конструкцию, которая подразумевает

file1 = sys.stdin

и

file1 = fileinput.input(sys.argv[1])

Ответы [ 2 ]

6 голосов
/ 01 марта 2010
import fileinput
for line in fileinput.input():
    print line
0 голосов
/ 01 марта 2010

«Объединяющая конструкция» звучит так, как будто вы хотите иметь доступ к файлу, представленному в качестве аргумента, или sys.stdin через одну переменную, так что вы можете просто сказать функциям получить строку из этой вещи, К счастью, sys.stdin - это просто еще один объект File, поэтому у вас есть одинаковая функциональность с обоими, и это так же просто, как с блоком try / исключением:

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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...