gpt4 book ai didi

python - 在 KeyboardInterrupt 之后杀死 subprocess.call

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:59 26 4
gpt4 key购买 nike

当我收到键盘中断 (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')

最佳答案

  1. p 只是一个整数 (.returncode),因此没有 .pid 属性(运行 您的 代码,按 CTRL+C 看看会发生什么)

  2. 在 POSIX 上,SIGINT 被发送到终端的前台进程组,因此无需您执行任何其他操作即可杀死子进程,请参阅 How CTRL+C works
    您也可以检查 child 是否在 Windows 上被终止。

如果 child 没有在 KeyboardInterrupt 上被杀死,那么你可以手动完成:subprocess.call() is just Popen().wait() -- 你可以自己调用它:

p = subprocess.Popen(cmd)
try:
p.wait()
except KeyboardInterrupt:
try:
p.terminate()
except OSError:
pass
p.wait()

关于python - 在 KeyboardInterrupt 之后杀死 subprocess.call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33496416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com