2011-11-07 29 views
7

類似的問題已被要求before,但答案建議一種解決方法,這是不適用於我的情況。Python的raw_input以下sys.stdin.read()拋出EOFError

一封電子郵件從狗管道輸送到一個腳本,並從標準輸入讀:

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()將獲得由read()離開了EOF,但有辦法'重置'STDIN?

+0

你在什麼系統上?在Linux上,這工作正常! –

+0

Mac OS X(10.7)。亞歷克斯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