subprocess.Popen无法执行
在我的代码中,有以下内容:
...
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
我试了这些简单的测试,结果都能正常运行。你确定你的脚本真的没有执行吗?
这个代码会启动一个进程,通常在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