Python 基于标准输出的逻辑重新运行子进程
我正在使用一些企业软件运行子流程,当我遇到超时错误时,子流程没有返回代码 因此,我必须在标准输出中搜索字符串中的错误。如果出现超时错误,我需要重新运行整个进程。我想这样做三次。如果进程在第三次尝试时失败,请不要再尝试 我有这样做的代码(如下),但我想知道是否有一种更快或更有效的方法Python 基于标准输出的逻辑重新运行子进程,python,subprocess,Python,Subprocess,我正在使用一些企业软件运行子流程,当我遇到超时错误时,子流程没有返回代码 因此,我必须在标准输出中搜索字符串中的错误。如果出现超时错误,我需要重新运行整个进程。我想这样做三次。如果进程在第三次尝试时失败,请不要再尝试 我有这样做的代码(如下),但我想知道是否有一种更快或更有效的方法 import subprocess cmd = 'path/to/some/other/process' rc = subprocess.Popen(cmd, stdout=STDOUT, stderr=Err)
import subprocess
cmd = 'path/to/some/other/process'
rc = subprocess.Popen(cmd, stdout=STDOUT, stderr=Err)
out, err = rc.communicate()
timeout_check(out)
tries = 0
def timeout_check(out, tries):
if 'Error 1234: Timeout Error Message' in out:
tries += 1
rc.kill()
if tries < 3:
rc = subprocess.Popen(cmd, stdout=STDOUT, stderr=Err)
out, err = rc.communicate()
timeout_check(out, tries)
else:
# cmd has failed after 3 attempts, raise exception
else:
return (rc, out)
导入子流程
cmd='path/to/some/other/process'
rc=subprocess.Popen(cmd,stdout=stdout,stderr=Err)
out,err=rc.communicate()
超时检查(退出)
尝试=0
def超时检查(退出,尝试):
如果“错误1234:超时错误消息”输入输出:
尝试次数+=1
rc.kill()
如果小于3:
rc=subprocess.Popen(cmd,stdout=stdout,stderr=Err)
out,err=rc.communicate()
超时\u签出(退出,尝试)
其他:
#cmd在3次尝试后失败,引发异常
其他:
返回(rc,out)
使用常规循环看起来会更好,imho,这不是真正需要递归的情况。