Как обработать EOFError для raw_input() в python в Mac OS X

Моя программа на Python имеет два вызова raw_input()

Первый raw_input() это принимать многострочный ввод от пользователя. Пользователь может выполнить Ctrl+D (Ctrl+Z в окнах) для конца ввода.

второй raw_input() должен получить другой ввод от пользователя с приглашением типа (y/n).

К сожалению (только в Mac OS X?), Второй raw_input() повышения EOFError когда стандартный ввод прекращается (с помощью Ctrl+D) вначале raw_input() незамедлительный.

Пожалуйста, смотрите мой пример кода ниже для более подробного объяснения -

mailBody = ''
signature = 'Later!'
print 'Compose your mail:'
while True:
    try:
        # Hit ^D after entering some text
        mailBody+= raw_input()
        mailBody+='\n'
    except EOFError:
        break

# This raw_input() throws EOFError too. Because, stdin is terminated for the session
# when EOF (^D) is issues at first raw_input() method (Where as, it doesn't raise EOFError in Linux)
opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
print '-'*10+'Your Mail'
if opt == 'y':
    print mailBody+"\n"+signature
else:
    print mailBody
print '-'*19

Выход программы:

-1- abhinay@MacBook code/py % python prompt.py                                                        
Compose your mail:
hello there!
how is everybody?
Do you want to add signature to your mail? (y/N): Traceback (most recent call last):
  File "prompt.py", line 11, in <module>
    opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
EOFError

Как я могу сделать второй запрос не поднимать EOFError, Пожалуйста помоги!

РЕДАКТИРОВАТЬ:

Я отредактировал свой вопрос, чтобы сделать его простым.

Я запустил приведенный выше код в системе Linux, он работает без проблем. То есть пользователю было предложено во втором raw_input() получить выбор "(y/N)".

1 ответ

Решение

Вполне нормально, что когда стандартный ввод завершается (путем нажатия control-D в системах, основанных на Unix- я думаю, что это control-Z в Windows), он остается завершенным после этого (если вы не закроете и не откроете его в то же время, конечно).

Другие вопросы по тегам