-4

如果用户输入了不存在的不正确目录名称,rsync 会生成此错误。我正在使用subprocess.PopenPython。如何在 Python 中捕获此错误?

rsync: link_stat "/fdsfsd" failed: No such file or directory (2)
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1637) [Receiver=3.1.0dev]
    rsync: [Receiver] write error: Broken pipe (32)
4

1 回答 1

3

这看起来不像异常,而是由rsync. 因此,您无法在 Python 中捕获它。你可以做的是监控Popen对象的返回码,看看进程是否成功终止。阅读有关returncode的文档。

如果您想尝试解析错误消息,我想您可以尝试使用正则表达式,但这可能不值得。当您调用外部进程时,没有通用方法可以知道其打印的错误消息如何映射到 Python 异常类型。该程序可以做任何事情并以任何未知的方式失败。您最好的选择是简单地查看返回码,如果它不为零,则引发异常,说明“外部进程以某种方式失败”。这基本上是subprocess.check_call为你做的。

于 2012-12-24T05:15:30.310 回答