2013-10-02 4 views
0

이 반대의 이유는 무엇입니까?스트림 읽기() 차단하기

fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_NONBLOCK) 

나는

fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_BLOCK) 

을 시도했지만 그것은 AttributeError: 'module' object has no attribute 'O_BLOCK' 발생합니다.

약간의 배경 지식을 얻기 위해 데이터를 청크로 구성하여 popen 프로세스의 STDIN으로 파이핑합니다. STDOUT에서 대기중인 데이터가 있으면 즉시 읽어야하고 클라이언트에 다시 전달해야합니다 (따라서 비 차단으로 전환). 그러나 파이핑 데이터가 끝나면 STDOUT에서 EOF를 얻을 때까지 차단해야합니다. (? 이상적으로 크로스 플랫폼)이 할 수있는 더 나은 방법이 있다면

나는 모든 귀

답변

1

현재 플래그를 얻고 O_NONBLOCK 비트 해제 해요 :

flag = fcntl.fcntl(MyStream.fileno(), fcntl.F_GETFL) 
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK) 
+0

감사가 해냈어 – Basic