2017-02-04 7 views
-2

일부 데이터가 파이프에 나타날 때까지 프로세스를 일시 중지하는 python (2.7)에서 stdin 블로킹 읽기 작업을 수행하는 방법은 무엇입니까?파이썬 표준 입력에서 블로킹

read()의 문제는 처음으로 반환하면 read()이 더 이상 차단되지 않는다는 사실에 있습니다. 예 :

echo 'test test ' | python test.py

# test.py 
import sys 
while True: 
    string = sys.stdin.read() # Blocks only for the first time 
    print '!!!!!!!!' 
+3

'pipe'는 텍스트'test test'를 스크립트에 보내고 연결을 닫습니다 - 다음'read()'로 무엇을 기대합니까? – furas

+0

다른 프로세스 (예 : 상위 프로세스)가이 프로세스의 stdin에 쓸 수 있습니다. –

+0

부모 프로세스는 스크립트가 아닌'echo'에만 쓸 수 있습니다. – furas

답변

1

f.read() 블록뿐만 아니라 EOF에 도달하면 빈 문자열이 반환합니다. 입력 스트림이 닫히고 EOF에 도달 했으므로 예제가 손상되었습니다. 또한 전체 행을 읽을 가능성이 가장 높으므로 readline이 적합합니다.

+0

Mb 알다시피, eof에 도달 한 후 표준 입력을 수정할 수있는 방법이 있습니까? –

+0

방법이 없습니다. 귀하의 질문은 [XY 문제] (http://meta.stackexchange.com/a/66378)와 같이 많이 들리지만 실제 문제 (새로운 질문에서)를 말하면 도움이 될 수 있습니다. –

+0

문제가 다른 해결책을 가지고 있습니다 예를 들어 다른 인터 프로세스 도구를 사용하여), 나는 직접 접근 방식으로 빠르게 처리 할 수 ​​있다고 생각했습니다. 원래 문제는 모든 입력에서 재시작 할 필요가없는 syntaxnet 고정 컨테이너의 래퍼입니다 (시작 시간이 상당 함). 그것은 stdin에서 데이터를 처리 할 수 ​​있고 뭔가 다른 것을 읽을 내부 스크립트를 만드는 것은 꽤 복잡한 것처럼 보입니다. –