0

我有一个 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 也有类似的问题,但到目前为止,解决方案对我没有帮助。

4

3 回答 3

2

如果您想要一个异常以防被调用的命令失败(非零退出代码),请使用subprocess.check_call(batch_cmd)它来执行它。

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

于 2013-04-17T21:48:21.697 回答
1

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

如果你真的需要,你可以做这样的递归。

def ExectuteBatchCommand(batch_cmd)
    try: 
        subprocess.call(batch_cmd)
    except subprocess.CalledProcessError:
        print "error. retrying"
        ExectuteBatchCommand(batch_cmd)
于 2013-04-17T21:49:45.447 回答
0

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

于 2013-04-17T21:48:03.010 回答