標準輸出。如果需要定期檢查正在運行的進程的stdout
。例如,該進程是tail -f /tmp/file
,它是在python腳本中產生的。然後,每個x秒,該子進程的stdout被寫入一個字符串並進一步處理。子進程最終由腳本停止。檢查正在運行的子進程的蟒蛇
解析子進程的標準輸出,如果直到現在使用check_output
,這似乎不起作用,因爲進程仍在運行並且不會產生明確的輸出。
>>> from subprocess import check_output
>>> out = check_output(["tail", "-f", "/tmp/file"])
#(waiting for tail to finish)
應該可以使用線程的子過程,使得多個子過程的輸出可被處理(例如,尾-f/TMP/file1的,尾-f/TMP/file2的)。
我如何開始一個子進程,定期檢查和處理標準輸出,並最終停在一個多線程友好的方式子? python腳本在Linux系統上運行。
的目標不是連續地讀取文件,尾部命令是一個例子,因爲它的表現完全一樣使用的實際命令。
編輯:我沒有想到這一點,該文件不存在。 check_output
現在只是等待過程完成。
edit2:另一種方法,Popen
和PIPE
似乎導致同樣的問題。它等待tail
完成。
>>> from subprocess import Popen, PIPE, STDOUT
>>> cmd = 'tail -f /tmp/file'
>>> p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
>>> output = p.stdout.read()
#(waiting for tail to finish)
http://stackoverflow.com/a/6482200/1866177可能解決了這個問題。 – Dschoni
您的示例比無法讀取標準輸出有更大的問題。請修復它。 –
@Dschoni,OP正在嘗試攝取,而不是重定向輸出。這使得它比您提供的鏈接更完整。 –