-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 に答える