Python subprocess.call 超时重试

ggn*_*edo 5 python subprocess python-3.x

如果不知何故超时,我想重新运行 subprocess.call 。

subprocess.call('some command', timeout=600)
if timeout:
    subprocess.call('some command')
Run Code Online (Sandbox Code Playgroud)

我该怎么做这样的事情?

Cri*_*ati 7

subprocess.call引发[Python 3.Docs]:异常 subprocess.TimeoutExpired当超时(给定并)达到时(就像Popen.communicate一样)一样)。

下面是一段代码,它不断启动NotePad,超时时间为 3 秒,直到运行 2 次,或者用户手动将其关闭:

>>> max_runs = 2
>>> run = 0
>>> while run < max_runs:
...     try:
...             subprocess.call("notepad", timeout=3)
...     except subprocess.TimeoutExpired:
...             continue
...     else:
...             break
...     finally:
...             run += 1
...
0
Run Code Online (Sandbox Code Playgroud)

尽管这在技术上回答了问题,但我认为重新启动未结束的进程不是一个好主意,因为连续运行很有可能会产生相同的结果(将超时)。在这种情况下,您必须使用Popen进行通信,如果进程超时,请通过Popen.terminate终止它。