Rap*_*tor 6 python subprocess python-3.x
我在 Python 中调用 shell 脚本,它会生成多个子进程。如果该进程在两分钟后没有完成,我想终止该进程及其所有子进程。
有什么办法可以使用 subprocess.run 做到这一点,还是必须重新使用 Popen?由于 run 被阻塞,我无法将 pid 保存在某个地方以在额外的命令中杀死子进程。一个简短的代码示例:
try:
subprocess.run(["my_shell_script"], stderr=subprocess.STDOUT, timeout=120)
except subprocess.TimeoutExpired:
print("Timeout during execution")
Run Code Online (Sandbox Code Playgroud)
引用文档:
subprocess.run - 默认情况下不捕获 stdout 或 stderr。为此,请为 stdout 和/或 stderr 参数传递 PIPE。
如果您不愿意,不必使用 Popen()。模块中的其他函数,如.call()、.Popen()。
共有三个“文件”流:stdin 用于输入,stdout 和 stderr 用于输出。应用程序决定在哪里写什么;通常错误和诊断信息发送到 stderr,其余的发送到 stdout。要捕获其中任一输出的输出,请指定 subprocess.PIPE 参数,以便将“流”重定向到您的程序中。
超时后终止子进程:
import os
import signal
import subprocess
try:
proc = subprocess.Popen(["ls", "-l"], stdout=PIPE, stderr=PIPE, timeout=120)
except subprocess.TimeoutExpired:
os.kill(proc.pid, signal.SIGTERM)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |