2
如果使用子進程在linux上執行一個xterm,然後又執行一些其他進程,Python(2.6.5)似乎永遠不會意識到進程(xterm)已經完成執行。xterm python subprocess
考慮下面的代碼:
import subprocess
import shlex
import time
proc = subprocess.Popen(shlex.split('xterm -iconic -title "FOO_BAR" -e sleep 5'))
while True:
if proc.poll():
print 'Process completed'
time.sleep(0.1)
這將無限循環播放,直到停止Python解釋器。我猜測這可能是由於xterm的一些奇怪造成的,並不是Python子進程模塊的直接原因,但也許還有其他一些聰明人可以揭示這種情況。
注意:調用proc.communicate()
實際上將在xterm完成時返回,但由於某種原因,輪詢方法將不起作用。
使用'is'作爲單例如'None' – jfs
我不敢相信我在使用poll函數時犯了這個基本錯誤。謝謝你的「頭頂」:-) –
@ J.F.Sebastian Ha,是的,對不起 - 舊的C習慣很難死。我已經更新了答案。 – ottomeister