【问题标题】:Terminate a process created with 'subprocess.run'终止使用“subprocess.run”创建的进程
【发布时间】:2018-02-05 13:17:10
【问题描述】:

如何在 Python 3 中终止使用 subprocess.run 创建的进程?

subprocess.run 的文档是here,但没有具体说明。

返回值的文档是here,但里面也没有提示。

使用subprocess.Popen 很容易:

p = subprocess.Popen(...)
...
p.terminate()

使用subprocess.run 时如何做同样的事情?

【问题讨论】:

    标签: python python-3.x subprocess


    【解决方案1】:

    你不能,因为进程只有在结束后才会返回到 python 解释器。

    您可以尝试在线程中运行时获取 PID 并将其杀死,但是...

    对于这些情况,Popen 是最佳解决方案,因为您可以控制流程的输入/输出和结束。

    来自documentation

    该模块中的底层进程创建和管理由 Popen 类处理。它提供了很大的灵活性,以便开发人员能够处理便利功能未涵盖的不太常见的情况。

    请注意,文档首先描述run,然后是Popen,然后是现在已弃用的check_callcheck_output ...调用

    【讨论】:

    • 好的,谢谢。使用Popen,我无法正确调用Windows cmd ...。但鉴于您的回答,我将专注于解决这个问题,而不是与run 斗争。
    • 您可以编辑您的问题或创建另一个问题来解释您为什么在 Popen 上苦苦挣扎。使用run 可以完成的所有操作都可以使用Popen 完成,还有更多...
    • 你说得对,我要收回它。我正在创建两个进程,第二个进程取决于第一个进程,然后终止第一个进程而不等待第二个进程完成。这当然给了我第二个过程的错误,我现在已经解决了。再次感谢!!!
    猜你喜欢
    • 2022-10-19
    • 2015-03-12
    • 2017-03-27
    • 2010-10-14
    • 2012-03-14
    • 2018-12-21
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多