2013-10-02 115 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'

爲了給出一點背景知識,我將數據分塊輸入到STDIN的'ed過程中。如果在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