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)
我该怎么做这样的事情?
subprocess.call引发[Python 3.Docs]:异常 subprocess.TimeoutExpired当超时(给定并)达到时(就像Popen.communicate一样)一样)。
下面是一段代码,它不断启动NotePad,超时时间为 3 秒,直到运行 2 次,或者用户手动将其关闭:
Run Code Online (Sandbox Code Playgroud)>>> 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
尽管这在技术上回答了问题,但我认为重新启动未结束的进程不是一个好主意,因为连续运行很有可能会产生相同的结果(将超时)。在这种情况下,您必须使用Popen并进行通信,如果进程超时,请通过Popen.terminate终止它。