2009-03-23 5 views
8

오픈 os.pipe()에서 읽는 순간에 비어 있는지 확인하려고합니다. 문제는 read()을 호출하면 실제로 테스트 할 부분이있을 때까지 거기에서 프로그램을 차단하지만 테스트가 성공하면 아무 것도 없을 것입니다.차단되지 않고 os.pipe()에서 읽는 방법?

시간 초과와 함께 select.select()을 사용할 수 있다는 것을 알고 있지만 문제에 대한 다른 해결책이 있는지 알고 싶었습니다.

답변

14

시도해보십시오.

import os, fcntl 
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

이 부분은 thePipe.read()이어야합니다. pipe(7) 사람 페이지에서

:

프로세스, 빈 파이프에서 읽을 데이터를 사용할 때까지 읽기 (2) 을 차단합니다 시도합니다. (...) fcntl (2) F_SETFL 작업을 에 사용하면 O_NONBLOCK 열린 파일 상태 플래그를 사용하여 비 차단 I/O를 사용할 수 있습니다.

+1

대단히 감사합니다. 이것은 내가 필요한 것입니다. – mpeterson

+1

Yesssss! 고맙습니다! – juliomalegria

+0

주의 :'.readline()'과 같은 파일 메쏘드는 non-blocking 모드를 기대하지 않을 수도 있습니다. – jfs

관련 문제