超时执行popen

时间:2018-08-31 05:36:51

标签: python-3.x multiprocessing subprocess

因此,我尝试通过execute专门执行Linux命令。我只想等待30秒才能执行此命令,因为在某些情况下,我的命令挂起并且程序永远等待。 以下是我使用的两种方法。

方法1

subprocess.popen()

方法2

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

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

1 个答案:

答案 0 :(得分:1)

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,但会自动终止子进程。