如果超时,我想重新运行subprocess.call。
subprocess.call('some command', timeout=600)
if timeout:
subprocess.call('some command')
我该怎么做?
答案 0 :(得分:3)
subprocess.call
在达到(给定和)超时(就像Popen.communicate
一样)时提高[Python 3]: exception subprocess.TimeoutExpired。
这是一段代码,它会以3秒钟的超时持续启动 notepad ,直到运行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
尽管从技术上来说,这可以回答问题,但我认为重新启动一个没有结束的过程不是一个好主意,因为很有可能连续运行的结果相同(超时)。在这种情况下,您必须使用 Popen 和 communication ,如果进程超时,请通过Popen.terminate()
将其终止。
答案 1 :(得分:1)
您可以使用基本的错误处理来捕获超时异常:
try:
subprocess.call('cmd', timeout=0)
except subprocess.TimeoutExpired:
print('Expired!')
# subprocess.call('cmd')
except
块仅在引发指定错误的情况下运行。有关更多信息,请参见Python docs tutorial on exceptions,特别是error handling。