subprocess.Popen将不会执行

时间:2014-05-01 21:30:03

标签: python subprocess

在我的代码中,我有以下内容:

...
subp_001 =  subprocess.Popen('./my001Script.sh %s %s' % (param1, param2), shell=True, preexec_fn=os.setsid)    
#atexit.register(subp_001.terminate)
time.sleep(5)
os.killpg(subp_001.pid, signal.SIGTERM) 
...

在某些时刻,一切正常,这意味着my001Script运行然后执行其余的python代码停止5秒钟脚本被杀死,然后我不记得我已经改变了什么使得my001Script永远不会再次运行,除非我取消time.sleep()。 我想找到一种方法来执行脚本,几秒钟后我就把它杀了。 我也尝试过这样做:

...
subp_001 =  subprocess.Popen('./my001Script.sh %s %s' % (param1, param2), shell=True, preexec_fn=os.setsid)    
#atexit.register(subp_001.terminate)
threading.Timer(5,killingBroadcastAck).start()
...

同样的事情,my001Script根本没有执行,顺便说一下,如果它没有执行,我应该期待os.killpg(subp_001.pid,signal.SIGTERM)的错误。我没有得到这样的错误。

任何提示?

1 个答案:

答案 0 :(得分:0)

通过这些最小的测试为我工作。你确定你的脚本真的没有执行吗?

这会运行该过程,该过程在不到5秒的时间内完成,然后发出一个错误,因为我无法再杀死那个过程了:

p = subprocess.Popen('echo hello', shell=True, preexec_fn=os.setsid)
print "done"
time.sleep(5)
os.killpg(p.pid, signal.SIGTERM)
print "waited"

输出:

done
hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 1] Operation not permitted

然后当将睡眠时间改为0时,它会足够快地杀死进程,而当它仍在那里时,它会再次按预期工作:

p = subprocess.Popen('echo hello', shell=True, preexec_fn=os.setsid)
print "done"
time.sleep(0)
os.killpg(p.pid, signal.SIGTERM)
print "waited"

输出:

done
waited