我有一个Python脚本,其间有一个批处理命令,
batch_cmd = "batch command"
subprocess.call(batch_cmd)考虑这样的场景,如果失败,我想重复运行这个批处理命令。我尝试使用batch_cmd /,但在“except”部分中也必须重复使用try/。这就是:
try:
batch_cmd = "batch command"
subprocess.call(batch_cmd)
except:
print "error. retrying"
subprocess.call(batch_cmd)然而,例外情况是不会被捕获。如果try块中的批处理命令失败,那么它将绕过“except”块,并执行脚本的其余部分。为此,我如何重写try/except部分?或者除了try/except之外,还有其他方法吗?我知道在SO上也有类似的问题,但到目前为止解决方案还没有帮到我。
发布于 2013-04-18 05:48:22
如果您希望在被调用的命令失败时出现异常(非零退出代码),请使用subprocess.check_call(batch_cmd)来执行它。
在这种情况下,还要使用except subprocess.CalledProcessError:,以避免捕获更多不必要的异常。
发布于 2013-04-18 05:49:45
我不建议你这么做。如果有什么不同的话,你应该设置一个固定的重试次数,并使用计数器来中断循环,如果它尝试太多次。如果它仍然不能执行,你可以raise一个新的异常来阻止代码继续。
如果你真的需要的话,你可以做一些像这样的递归操作。
def ExectuteBatchCommand(batch_cmd)
try:
subprocess.call(batch_cmd)
except subprocess.CalledProcessError:
print "error. retrying"
ExectuteBatchCommand(batch_cmd)发布于 2013-04-18 05:48:03
subprocess.call返回错误码。将其放在一个变量中,并使用if语句检查它是否失败。
https://stackoverflow.com/questions/16070788
复制相似问题