2
我想知道什麼時候管道的寫入結束關閉。有沒有辦法做到這一點?找出管道的寫入結束是否關閉
from subprocess import Popen, PIPE
p = subprocess.Popen('ls -lh', stdout = PIPE, shell = True)
def read_output(out,queue):
for line in iter(out.readline,b''):
print('.')
t = Thread(target=enqueue_output, args=(p.stdout,q))
t.daemon = True
t.start()
while True:
#this only works if I put
#if line == '' :
# out.close()
#in the for loop of read_output, which I want to avoid.
if p.stdout.closed : #need to find something else than closed here...
break
督察我試圖避免必須在IO線程做out.close()......我想以某種方式讀出的屬性或p.stdout的方法來知道它寫目前已關閉。
這實際上不是尋找另一種方式來優雅地閱讀Popen的p.stdout,我已經有2種其他方式。這更多是關於學習一些我認爲應該可能的事情,但我無法想象如何去做...
乾杯!
感謝您的回答,但這不是我要找的。 p是產生shell的子進程。 p.stdout由shell進程編寫,並由我讀取。我不能也不想模擬shell進程並嘗試寫入其stdout。我只想知道shell進程是否已關閉管道的末端。如果我在p.stdout而不是readline上執行read_raw會引發EOFError,但是由於readline捕獲了這些,所以我什麼也得不到。我仍然相信有一種方法可以看到p.stdout的寫入側的句柄已關閉。 – caliloo 2014-12-08 01:41:23