【问题标题】:Python: terminate subprocess without having access to subprocess.Popen object?Python:终止子进程而不访问 subprocess.Popen 对象?
【发布时间】:2019-08-01 03:43:27
【问题描述】:

我有一个脚本,我只需使用 subprocess 模块在 Python 中调用一个子进程,如下所示:

import subprocess
process = subprocess.Popen(['python3', 'some_Python_script.py']

我希望能够终止/终止这个进程。但是,在创建进程后,在我的应用程序中,我无法访问 process 对象,因此无法按照 here 中的描述使用 process.kill 通常终止它。

但是,有没有办法“存储”一些唯一的进程 ID,并能够在以后操作/终止它(如果它仍在运行)?

例如,我正在考虑类似的事情

process = subprocess.Popen(['python3', 'some_Python_script.py']
process_ID_string = process.id
...
...
*later on*
subprocess.kill(process_id = process_ID_string)

subprocess 模块可以实现类似的功能吗?

【问题讨论】:

  • 如果可以存储PID,为什么不能以同样的方式存储对对象的引用?
  • (需要明确的是,它是process.pid,记录在docs.python.org/3/library/subprocess.html#subprocess.Popen.pid
  • 因为我正在使用Dash,而Dash 中的回调的行为类似于本地函数,因为它们的变量也是本地的,除了只能返回字符串等基本变量。

标签: python terminal subprocess terminate


【解决方案1】:
import subprocess, os, signal

process = subprocess.Popen(['python3', 'some_Python_script.py']
processId = process.pid

# later on
os.kill(processId, signal.SIGTERM)

【讨论】:

  • 这是完美的。我知道我的直觉是在正确的轨道上^^; ,但是subprocess 的文档并没有让我很容易找到这个功能。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-11-08
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多