执行超时的 popen



所以我试图通过subprocess.popen()执行Linux命令。我只想等待 30 秒来执行此命令,因为在某些情况下,我的命令挂起并且程序等待永远。 以下是我使用的 2 种方法。

方法1

cmd = "google-chrome  --headless  --timeout=30000  --ignore-certificate-errors --print-to-pdf out.pdf https://www.google.com/
process = subprocess.call(cmd, shell=True)
process.wait() # Here I want to wait only till 30 secs and not untill process completes

方法2

from multiprocessing import Process
p1 = Process(target=subprocess.call, args=(cmd,))
processTimeout = 50
p1.start()
p1.join(processTimeout)
if p1.is_alive():
p1.terminate()

在第二种方法中,甚至没有创建文件。请提出一个选项。

Popen.wait采用可选的timeout参数。您可以使用它仅在特定时间内等待完成。如果超时触发,您可以终止该过程。

process = subprocess.call(cmd)
try:
# if this returns, the process completed
process.wait(timeout=30)
except subprocess.TimeoutExpired:
process.terminate()

从 Python 3.5 开始,您还可以使用subprocess.run便利功能。

subprocess.run(cmd, timeout=30)

请注意,这仍会引发TimeoutExpired但会自动终止子进程。

相关内容

  • 没有找到相关文章

最新更新