xterm python子进程
如果在linux上使用子进程执行xterm,而xterm又执行其他进程,那么Python(2.6.5)似乎永远不会意识到该进程(xterm)已经完成了执行 考虑以下代码: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():
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习惯很难改变。我已经更新了答案。