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,这不是真正需要递归的情况。