【问题标题】:Python windows script subprocess continues to output after script endsPython windows脚本子进程在脚本结束后继续输出
【发布时间】:2014-12-17 11:22:26
【问题描述】:
您好,我正在 Windows 中编写 Python 脚本并使用子进程
我有一条线
results=subprocess.Popen(['xyz.exe'],stdout=subprocess.PIPE)
脚本结束后,我回到 cmd 中的提示胡萝卜,我看到脚本的更多输出被打印出来。
我看到了类似的东西
找不到 xxx_echo.txt
被反复打印。
如何正确关闭windows中的子进程?
【问题讨论】:
标签:
python
windows
subprocess
【解决方案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() 用于卡住的子进程。