我有一个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块中的批处理命令失败,那么它只是绕过'except'块并执行剩余的脚本。我怎样才能为此重写try / except部分?或者除了try / except之外还有其他方法吗?我知道在SO上也有过类似的问题,但到目前为止解决方案对我没有帮助。
答案 0 :(得分:2)
如果您想要在被叫命令失败(非零退出代码)的情况下发生异常,请使用subprocess.check_call(batch_cmd)
执行它。
在这种情况下也使用except subprocess.CalledProcessError:
以避免捕获超出必要的例外情况。
答案 1 :(得分:1)
我不推荐它。如果有的话,你应该设置一定数量的重试,并使用一个计数器来打破循环,如果它尝试太多次。如果它仍然无法执行raise
新异常以阻止代码继续执行。
如果你真的需要,你可以像这样递归。
def ExectuteBatchCommand(batch_cmd)
try:
subprocess.call(batch_cmd)
except subprocess.CalledProcessError:
print "error. retrying"
ExectuteBatchCommand(batch_cmd)
答案 2 :(得分:0)
subprocess.call返回错误代码。将其放在变量中并使用if语句检查它是否失败。