我有一个Python脚本,其间有一个批处理命令,

batch_cmd = "batch command"
subprocess.call(batch_cmd)

考虑这种情况,如果它失败,我想重复运行此批处理命令。 我试图以这种方式使用try / except,使得batch_cmd也必须在“ except”部分中重复。 那是:

try: 
    batch_cmd = "batch command"
    subprocess.call(batch_cmd)

except:
    print "error. retrying"
    subprocess.call(batch_cmd)

但是,没有捕获到异常。 如果try块中的batch命令失败,则它会绕过'except'块并执行脚本的其余部分。 我该如何重写try / except部分呢? 还是除了try / except之外还有其他方法吗? 我知道在SO上也有类似的问题,但到目前为止,解决方案对我没有帮助。

===============>>#1 票数:2 已采纳

如果要在被调用的命令失败(非零退出代码)的情况下发生异常,请使用subprocess.check_call(batch_cmd)执行该subprocess.check_call(batch_cmd)

在这种情况下,还请使用except subprocess.CalledProcessError:以避免捕获不必要的异常。

===============>>#2 票数:1

我不推荐它。 如果有的话,您宁可设置固定的重试次数,如果尝试多次,则使用计数器来中断循环。 如果仍然无法执行,则raise新异常以防止代码继续。

如果您确实需要,可以执行类似的递归操作。

def ExectuteBatchCommand(batch_cmd)
    try: 
        subprocess.call(batch_cmd)
    except subprocess.CalledProcessError:
        print "error. retrying"
        ExectuteBatchCommand(batch_cmd)

===============>>#3 票数:0

subprocess.call返回错误代码。 将其放在变量中,并使用if语句检查它是否失败。

  ask by user2251144 translate from so

未解决问题?本站智能推荐: