Как обрабатывать EOFERROR для RAW_INPUT () в Python в Mac OS X

StackOverflow https://stackoverflow.com/questions/2197891

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

Второй raw_input() следует сделать еще один вход от пользователя с помощью (y / n) Тип подсказки.

К сожалению (в Mac OS X только?), Второй raw_input() поднимает EOFError Когда stdin завершится (с 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)».

Это было полезно?

Решение

Это вполне нормально, что, когда стандартный вход прекращен (путем удара Diston-d, в системах, производных Unix - я думаю, что это управление Z в Windows), это остается заканчивается после этого (если вы не закрываете и не откроете его тем временем, конечно).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top