xterm python子进程

xterm python子进程,python,python-2.6,xterm,subprocess,Python,Python 2.6,Xterm,Subprocess,如果在linux上使用子进程执行xterm,而xterm又执行其他进程,那么Python(2.6.5)似乎永远不会意识到该进程(xterm)已经完成了执行 考虑以下代码: import subprocess import shlex import time proc = subprocess.Popen(shlex.split('xterm -iconic -title "FOO_BAR" -e sleep 5')) while True: if proc.poll():

如果在linux上使用子进程执行xterm,而xterm又执行其他进程,那么Python(2.6.5)似乎永远不会意识到该进程(xterm)已经完成了执行

考虑以下代码:

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完成时返回,但由于某些原因,轮询方法将不起作用。

此程序不区分
proc.poll()
返回
None
(表示进程仍在运行)和
proc.poll()
返回
0
(意味着进程终止时退出值为零,通常表示成功完成)。更改此行:

if proc.poll():
为此:

if proc.poll() is not None:

看看这是否有帮助。

use
is
对于像
None
这样的单身人士,我不敢相信我在使用投票功能时犯了这个根本性的错误。谢谢你的“拍头”:-@J.F.Sebastian哈,是的,对不起——旧的C习惯很难改变。我已经更新了答案。