2011-11-07 8 views
7

同様の質問がbeforeと尋ねられましたが、私の状況に該当しない回避策が提案されました。sys.stdin.read()の後のPython raw_inputはEOFErrorをスローします

電子メールメッセージは、スクリプトにはmuttからパイプされ、STDINから読み込まれます:

message = sys.stdin.read() 
# message is parsed and URLs are printed as a list to choose from... 
selected_index = raw_input('Which URL to open?') 

は、私はそのraw_inputを理解()の読み取り()が残したEOFを得るが、道にはあります'リセット' STDIN?

+0

あなたはどのシステムにいますか? Linuxでは、これは正常に動作します! –

+0

Mac OS X(10.7)。 Alex Martelliは、STDIN [ここ](http://stackoverflow.com/questions/2197891/how-to-handle-eoferror-for-raw-input-in-python-in-mac-os-x)を再開するよう提案しました。しかし、それは私にとってはうまくいかないようです。 – janeden

+0

私は、GNU/Linuxシステム(CentOS)で全く同じ例外がスローされることを確認しました。手動でSTDINを入力すると(CTRL-Dで入力を終了すると)、スクリプトは正常に動作しますが、 './script.py janeden

答えて

5

は、あなたはこれを試してみました:

message = sys.stdin.read() 
sys.stdin = open('/dev/tty') 
selected_index = raw_input('Which URL to open?') 

をこれは、Linux上で動作します。多分OSXでもうまくいくでしょう。

+0

残念ながら、これはうまくいきません(これは私が最初の投稿にリンクした質問のために提案された解決策です)。修正された形式では、スクリプトはraw_input関数に到着する前に**入力を待っていますが、復帰するとエラーが発生します。 – janeden

+0

これは奇妙です - 私は前に何か間違ったことをしたに違いありません。ありがとう! – janeden

+0

素敵なハック! Linux FTW – g33kz0r

0

sys.stdin.seek(0)

リファレンスを使用してSTDINをリセットしてください:http://docs.python.org/library/fileinput.html

+0

これはちょっと役立ちます - EOFError例外はなくなりましたが、raw_inputは完全に無視されるようになりました(つまり、スクリプトはユーザーの入力を待たずに実行されます)。 – janeden

関連する問題