2012-12-24 3 views
-4

사용자가 존재하지 않는 잘못된 디렉토리 이름을 입력하면 rsync가이 오류를 생성합니다. 파이썬에서 subprocess.Popen을 사용하고 있습니다. 파이썬에서 어떻게이 오류를 잡을 수 있습니까?파이썬에서이 예외를 잡는 방법?

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

어떤 코드가이 예외를 throw합니까? – Blender

답변

3

이는 예외로 보이지 않지만 오류는 rsync으로 인쇄됩니다. 따라서 파이썬에서는이를 포착 할 수 없습니다. 당신이 할 수있는 일은 Popen 객체의 리턴 코드를 모니터하여 프로세스가 성공적으로 종료되었는지 확인하는 것입니다. returncode에 대한 설명서를 읽으십시오.

오류 메시지를 구문 분석하려고한다면 정규 표현식으로 시도해 볼 수는 있지만 그만한 가치는 없을 것입니다. 외부 프로세스를 호출 할 때 인쇄 된 오류 메시지가 파이썬 예외 유형에 매핑되는 방법을 알 수있는 범용 방법이 없습니다. 이 프로그램은 무엇이든 할 수 있고 알려지지 않은 방법으로 실패 할 수 있습니다. 최선의 방법은 returncode를 살펴 보는 것입니다. 0이 아니면 "외부 프로세스가 어떻게 든 실패했습니다"라는 예외를 발생시킵니다. 이것은 기본적으로 subprocess.check_call 무엇입니까.

+0

어떻게하면됩니까? 정규식 사용하기? – user1881957

+0

@ user1881957 : 아니요, 리턴 코드를 사용하십시오. 내 편집 된 답변보기 – BrenBarn