python 管道 非阻塞 子程序非阻塞從管道讀取

2021-10-16 20:06:29 字數 1094 閱讀 2849

我有乙個程式,需要幾個小時來完成,必須整合到乙個現有的程式。我有乙個指令碼,它通過子程序模組執行程式,這很好地工作。但無法判斷該計畫有多大進展。這個程式確實向stdout輸出一些實時資訊,所以我想我可以從管道中讀取一些資訊。在

但是我不能正確地工作。我的指令碼似乎阻礙了實時從管道中讀取資料。在

我製作了乙個簡單的指令碼來演示:import subprocess

worklist = [

'name' : '1: ',

'cmd' :r'/python27/python.exe printer.py',

'pid' :none

'name' : '2: ',

'cmd' :r'/python27/python.exe printer.py',

'pid' :none

'name' : '3: ',

'cmd' :r'/python27/python.exe printer.py',

'pid' :none

for work in worklist:

work['pid'] = subprocess.popen(work['cmd'], stdout=subprocess.pipe, stderr=subprocess.pipe,bufsize=0)

while true:

for work in worklist:

for line in work['pid'].stdout:

print work['name'] + str(line)

if all(item['pid'].poll() is not none for item in worklist):

break

for work in worklist:

work['pid'].communicate

在印表機.py包含:

^$所以我希望看到的是,它列印每個印表機.py「我實時打**過來。不過,這一切都在同一時間完成了。在

有沒有辦法只使用子程序模組或其他python內建程式來解決這個問題?在

我在一台windows機器上,所以我不能使用pexpect,另外,由於這將不得不在很多系統上使用,我不想引入依賴項。。。或者至少盡可能少

命名管道非阻塞模式通訊

分析 讀端 include include include include include include include include define fifo root myfifo void main int argc,char ar while 1 else printf read s fr...

阻塞 非阻塞

阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...

阻塞非阻塞

阻塞和非阻塞 阻塞 可用在assign語句和always語句中,表示只要源訊號發生變化,目標訊號就立刻完成賦值操作,在always塊中,結果與語句順序有關,在always塊中是順序關係 非阻塞 只能用在always語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...