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