2016-08-09 2 views
0

echo를 사용하여 파이썬 스크립트에 일부 데이터를 전달하고 그 후에 사용자가 옵션을 입력하도록 유도합니다. 나는 sys.stdin에있는 모든 데이터를 읽은 이후로 생각하고있는 EOFError을 실행 중입니다. 이 문제를 어떻게 해결합니까? 감사!python : stdin 및 raw_input에서 데이터 읽기

code.py :

x = '' 
for line in sys.stdin: 
    x += line 
y = raw_input() 

사용 :

echo -e -n '1324' | ./code.py 

오류 raw_input()에서 :

당신은 그냥 얻을 다음 표준 입력을 통해 데이터를 전송 (즉, 리디렉션 것) 할 수없고
EOFError: EOF when reading a line 

답변

1

대화식 모드.

a | b을 수행하면 b가 표준 입력에서 더 이상 읽을 수 없습니다. 원하는 경우 a이 끝나 파이프가 끊기면 중지됩니다.

그러나 a이 완료되면 다시 stdin을 얻는 것을 의미하지 않습니다.

은 아마 당신은 예를 들어, 당신이 일을 원하는대로 바꿀 수 ...

echo -n -e '1324' | ./code.py 

./code.py '1234' '5678' 

가되어 1234, 5678의 값을 얻을 수 sys.argv[]를 사용

import sys 

x = '' 
for line in sys.argv[1:]: 
    x += line+"\n" 

y = raw_input() 

출력 할 줄이 많으면 파일 및 읽을 수 있습니다 무엇 인수

import sys 

x = '' 
for line in open(sys.argv[1],"r"): 
    x += line 

y = raw_input() 
2

사용 :

{ echo -e -n '1324'; cat; } | ./code.py 

먼저 echo 파이프에 리터럴 문자열을 작성합니다 다음 cat은 표준 입력에서 읽어와 해당 복사 파이프. python 스크립트는이 모든 것을 표준 입력으로 보게됩니다.

+0

이 루프가 sys.stdin 루프에서 멈추는 경우 – user3019917

+0

입력 했습니까? stuff를 입력 한 다음 Ctl-d를 입력하여 EOF를 알립니다. – Barmar

+0

나는 당신이 의미하는 바를 이제 이해했다고 생각합니다. 감사 – user3019917