Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2010 13:46:11

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Имеется программа.
При вводе с клавиатуры все работает нормально, при попытке использовать функцию перенаправления выдает сообщение RuntimeError: input(): lost sys.stdin
OC Windows XP, Python 3.1.1
В командной строке ввожу: sum2.py < sum2.dat
sum2.dat файл содержит по одному числу в каждой строке.
Код программы:

print("Type integers, each followed by Enter; or ^D or ^Z to finish")

total = 0
count = 0

while True:
try:
line = input()
if line:
number = int(line)
total += number
count += 1
except ValueError as err:
print(err)
continue
except EOFError:
break

if count:
print("count =", count, "total =", total, "mean =", total / count)
Описания подобной ситуации нигде не встречал, только ссылки на описания стандартных потоков ввода/вывода. Знаю что с файла можно считать и другим способом, но хотелось бы разобраться именно с функцией input().
Проясните пожалуйста ситуацию. Заранее благодарен.



Офлайн

#2 Фев. 15, 2010 15:59:16

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

По-моему, у Лутца такая ситуевина описывается, если не ошибаюсь. К тому моменту, как выполняется input(), файл sum2.dat уже прочитан до конца, поэтому на input подается уже EOF



Офлайн

#3 Фев. 15, 2010 16:58:37

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Так то оно так, только в программе есть обработчик исключения:
except EOFError:
break
Программу взял из учебника “Програмирование на Python3 подробное руководство” Марк Самерфилд.
В общем там написоно что такая обработка исключений делает программу более устойчивой при работе с файлами содержащими пустые строки. Т.е. со слов автора книги все должно работать. Склонен ему доверять.
Скорее всего проблема в другом.



Офлайн

#4 Фев. 15, 2010 17:40:44

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

RuntimeError: input(): lost sys.stdin

на linux - работает нормально



Офлайн

#5 Фев. 15, 2010 19:47:41

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Спасибо конечно. Это говорит только о том что в книжке правильные программы. Значит что-то с виндой. Но на linux у меня нет возможности перейти т.к. компьютер только на работе и никто туда линукс ставить не даст. Хотелось бы все таки разобраться с проблемой под WinXP.



Офлайн

#6 Фев. 15, 2010 23:11:44

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

единственное отличие линукса от винды для текстовых файлов которое я знаю это перевод каретки \s



Офлайн

#7 Фев. 16, 2010 05:05:03

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Какое это отнощение имеет к проблеме? Или я что-то не понимаю?



Офлайн

#8 Фев. 17, 2010 05:22:20

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Нет ответа!
Прошу! Кто нибудь попробуйте этот код под Windows и отпишите: либо работает либо не работает, что бы понять проблема дейстительно в Windows или может что то с моим Python'ом. Заранее спасибо.
В каждой книге пишут, что программа написанная на языке Python работает на любой платформе и на любой конфигурации ПК. Получается что это не так.
Кстати у Луца нет описания такой ситуации. Пишут что функция input поддерживает такое перенапраление…



Офлайн

#9 Фев. 17, 2010 11:08:15

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Python 2.5.4 Win XP

print "Type integers, each followed by Enter; or ^D or ^Z to finish"

total = 0
count = 0

while True:
try:
line = raw_input()
if line:
number = int(line)
total += number
count += 1
except ValueError, err:
print err
continue
except EOFError:
break

if count:
print "count =", count, "total =", total, "mean =", total / count
sum2.dat
1
2
3
Результат:
C:\Python25>python C:\sum2.py < C:\sum2.dat
Type integers, each followed by Enter; or ^D or ^Z to finish
count = 3 total = 6 mean = 2
Работает в 2.5.4 на XP… :)



Офлайн

#10 Фев. 17, 2010 20:26:09

evggen
От:
Зарегистрирован: 2010-02-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

RuntimeError: input(): lost sys.stdin

Спасибо. Поставил 2.6.4 заменил input() на raw_input() все работает. Значит что то не то с версией 3.1.1. Ну как рекомендовали на этом форуме начинать лучше с 2.6.4, значит будем продолжать на 2.6.4.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version