2011-11-07 6 views
7

을 던집니다. 비슷한 질문이 before으로 요청되었지만, 그 답은 제 상황에 적용 할 수없는 해결 방법을 제안했습니다.sys.stdin.read()에 이어 Python raw_input이 EOFError

이메일 메시지는 스크립트에 똥개에서 파이프되고, 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

어떤 시스템을 사용하십니까? 리눅스에서는 이것이 잘 작동합니다! –

+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

http://docs.python.org/library/fileinput.html 당신이 시도 유무 :

이 리눅스에서 작동
message = sys.stdin.read() 
sys.stdin = open('/dev/tty') 
selected_index = raw_input('Which URL to open?') 

; 어쩌면 OSX에서도 작동 할 것입니다.

+0

불행히도, 작동하지 않습니다 (이것은 첫 번째 게시물에서 링크 된 질문에 대한 해결책입니다). 수정 된 양식에서 스크립트는 ** raw_input 함수에 도착하기 전에 ** 입력을 기다리고, 일단 return을 치면 오류가 발생합니다. – janeden

+0

이것은 이상합니다. 이전에 뭔가 잘못 했음에 틀림 없습니다. 지금 작동합니다. 감사! – janeden

+0

좋은 해킹! Linux FTW – g33kz0r

0

에 한번 사용 STDIN를 다시 sys.stdin.seek(0)

참조 :

+0

약간 도움이됩니다. EOFError 예외는 사라졌지만 raw_input은 이제 완전히 무시됩니다. 즉, 스크립트는 사용자 입력을 기다리지 않고 진행됩니다. – janeden

관련 문제