Я пытаюсь получить ввод от пользователя в командной строке. Программа считывает данные из текстового файла в виде "cat text.txt | ./thescript.py"
На момент рассматриваемого скрипта все данные уже прочитаны, обработаны и помещены в список списков.
Теперь я просматриваю этот список списков в поисках сомнительных элементов. Код в основном выглядит так:
for invoice in parsedlist:
if invoice[-1] == 3:
sys.stderr.write("triple duplicate at " + invoice[2]+' : ' + invoice[3]+"\n")
sys.stderr.write("continue Y or N \n")
answer = raw_input("Type your answer here")
if answer == 'N':
sys.exit(1)
else:
pass`
Этот код приводит к ошибке EOFError. Из того, что я уже понял, в этом случае stdin является чтением из cat, и, поскольку он уже достиг EOF, почему raw_input получает здесь EOF? (Я думаю) Цель состоит в том, чтобы сценарий печатал предупреждение о стандартной ошибке и позволял мне выбирать, игнорировать ли предупреждение и продолжать или полностью выйти. В конце концов, все выходные данные выводятся на стандартный вывод и не включают ни предупреждений об ошибках, ни ответов. Я видел примеры, в которых используется попытка/исключение, но я не смог понять это в этом контексте. (Например. Почему raw_input не ждет ввода?)
Я думаю, что, возможно, я просто неправильно решаю эту проблему и, таким образом, создаю проблему, которую лучше обойти, чем перепрыгнуть. Любая помощь приветствуется, как всегда.
cat text.txt | ./thescript.py
обычно пишется как./thescript.py < text.txt
. - person Karl Knechtel   schedule 26.07.2011