Python windows脚本子进程在脚本结束后继续输出

Posted

技术标签:

【中文标题】Python windows脚本子进程在脚本结束后继续输出【英文标题】:Python windows script subprocess continues to output after script ends 【发布时间】:2014-12-17 11:22:26 【问题描述】:

您好,我正在 Windows 中编写 Python 脚本并使用子进程

我有一条线

results=subprocess.Popen(['xyz.exe'],stdout=subprocess.PIPE)

脚本结束后,我回到 cmd 中的提示胡萝卜,我看到脚本的更多输出被打印出来。 我看到了类似的东西

找不到 xxx_echo.txt

被反复打印。

如何正确关闭windows中的子进程?

【问题讨论】:

你是如何关闭子进程的? @cwallenpoole 哈哈。我不是... 【参考方案1】:

Could Not Find xxx_echo.txt 看起来像一条错误消息,可能会打印在 stderr 上。您对 Popen() 的调用不会收集孩子的 stderr 输出,因此它将打印在您的终端中。

如果您的脚本不等待子进程完成,则在您的脚本退出后,子进程可能仍在执行。您应该调用wait() 等待子进程完成执行。如果不想等待,请调用terminate() 终止子进程。

如果您不希望将 stderr 转储到终端,您还应该收集它。

child = subprocess.Popen(['xyz.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
child.wait()
print child.returncode

【讨论】:

谢谢!这解决了我的问题。【参考方案2】:

在退出主脚本之前,您需要调用 results.kill() 或 results.terminate()(它们是 Windows 上的别名)来结束子进程。

【讨论】:

【参考方案3】:

你必须调用terminate()方法:

results.terminate()

还有kill() 用于卡住的子进程。

【讨论】:

以上是关于Python windows脚本子进程在脚本结束后继续输出的主要内容,如果未能解决你的问题,请参考以下文章

使用子进程在 Windows 上运行 Python 脚本

合并Python脚本的子进程'stdout和stderr,同时保持它们可区分

CentOS 7.9模拟并结束僵尸进程

Shell脚本的三种执行方式

Python子进程将数据定向到标准输入

Python 子进程无法访问 .bat 文件,因为它被另一个进程使用