当我得到一个键盘中断(ctrl-c)时,我需要在
Python中停止使用subprocess.call创建的进程
问题是p在完成执行之前没有分配给它的值
p = subprocess.call(cmd)
所以我不能使用os.kill来杀死它.另外,不能使用shell = True因为原因.
我想做的是:
try:
p = subprocess.call(cmd)
except KeyboardInterrupt:
os.kill(p.pid,signal.SIGTERM)
sys.exit('exited after ctrl-c')
最佳答案 > p只是一个整数(.returncode),因此没有.pid属性(运行代码,按CTRL C,看看会发生什么)
>在POSIX上,SIGINT被发送到终端的前台进程组,因此应该杀死子进程而不需要您执行任何其他操作,请参阅
How CTRL+C works
您也可以检查孩子是否在Windows上终止.
如果孩子没有在KeyboardInterrupt上被杀,那么你可以手动执行:subprocess.call()
is just Popen().wait()
– 你可以自己调用它:
p = subprocess.Popen(cmd)
try:
p.wait()
except KeyboardInterrupt:
try:
p.terminate()
except OSError:
pass
p.wait()