Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python subprocess.call带超时重试_Python_Python 3.x_Subprocess - Fatal编程技术网

Python subprocess.call带超时重试

Python 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

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我也有这种需要,因为我需要联系一个可能需要几分钟才能启动的服务。今天,我会做一点不同的事情——在下一次尝试之前使用更短的超时并添加延迟