Python subprocess.call带超时重试
如果超时,我想重新运行subprocess.callPython subprocess.call带超时重试,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,如果超时,我想重新运行subprocess.call subprocess.call('some command', timeout=600) if timeout: subprocess.call('some command') 如何执行类似操作?您可以使用基本错误处理来捕获超时异常: try: subprocess.call('cmd', timeout=0) except subprocess.TimeoutExpired: print('Expired!')
subprocess.call('some command', timeout=600)
if timeout:
subprocess.call('some command')
如何执行类似操作?您可以使用基本错误处理来捕获超时异常:
try:
subprocess.call('cmd', timeout=0)
except subprocess.TimeoutExpired:
print('Expired!')
# subprocess.call('cmd')
只有在引发指定错误时,才会运行except
块。有关详细信息,请参阅。子进程.call在超时(给定并达到)时引发(与Popen.communicate类似)
下面是一段代码,它会以3秒的超时时间启动记事本,直到它运行2次,或者用户手动关闭它:
>>最大运行次数=2
>>>运行=0
>>>运行<最大运行时:
... 尝试:
... 子进程调用(“记事本”,超时=3)
... 除subprocess.TimeoutExpired外:
... 持续
... 其他:
... 打破
... 最后:
... 运行+=1
...
0
虽然这从技术上回答了这个问题,但我认为重新启动一个没有结束的流程不是一个好主意,因为连续运行很有可能会产生相同的结果(将超时)。在这种情况下,您必须使用Popen并进行通信,如果进程超时,请通过Popen.terminate()将其终止。如果进程超时,您为什么要立即再次尝试调用它?@Ev.Kounis我也有这种需要,因为我需要联系一个可能需要几分钟才能启动的服务。今天,我会做一点不同的事情——在下一次尝试之前使用更短的超时并添加延迟