如果用户输入了不存在的错误目录名,则rsync会生成此错误。我在Python中使用subprocess.Popen
。我如何在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)
答案 0 :(得分:3)
这似乎不是例外,而是由rsync
打印的错误。因此,您无法在Python中捕获它。您可以做的是监视Popen
对象的返回代码,以查看进程是否成功终止。阅读returncode上的文档。
如果您想尝试解析错误消息,我想您可以尝试使用正则表达式,但它可能不值得。当您调用外部进程时,没有通用的方法来了解其打印的错误消息如何映射到Python异常类型。该程序可以做任何事情,并以任何未知的方式失败。你最好的选择就是查看返回码,如果它不为零,则提出一个异常,说“外部进程以某种方式失败”。这基本上是subprocess.check_call
为你做的事情。