【问题标题】:Kill subprocess.call after KeyboardInterrupt在 KeyboardInterrupt 之后杀死 subprocess.call
【发布时间】:2016-02-03 10:42:09
【问题描述】:

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

【问题讨论】:

标签: python process subprocess kill


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

  2. 1234563 您也可以检查孩子是否在 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2020-10-23
    • 2018-06-13
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多