5

私のpythonプログラムには2つの呼び出しがありますraw_input()

1 つ目raw_input()は、ユーザーから複数行の入力を取得することです。ユーザーは、入力を終了するために Ctrl+D (Windows では Ctrl+Z) を発行できます。

2番目raw_input()は、(y/n)タイプのプロンプトでユーザーから別の入力を受け取る必要があります。

残念ながら (Mac OS X のみ?)、stdin が最初のプロンプトで (Ctrl+D を使用して) 終了すると、2 番目raw_input()のエラーEOFErrorが発生します。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

を上げないように 2 番目のプロンプトを作成するにはどうすればよいですかEOFError。助けてください!

編集:

質問を簡単にするために編集しました。

上記のコードを Linux システムで実行しましたが、問題なく動作します。つまり、ユーザーは 2 番目の raw_input() で「(y/N)」の選択肢を受け取るように求められました。

4

1 に答える 1

6

標準入力が終了すると (Unix 派生システムでは control-D を押すことで -- Windows では control-Z だと思います)、その後も終了したままになるのはごく普通のことです (その間に閉じて再度開いていない限り、もちろん)。

于 2010-02-04T06:57:26.370 に答える