2013-03-22 4 views
1

저는 파일을 서버에서 서버로 복사하는 데 사용되는 python 파일에 대해 혼란 스럽습니다.subprocess.wait()의 반환 코드의 종류는 무엇입니까?

cmd를은 다음과 같습니다 hadoop fs -put /localhost/* /hadoop/* 코드입니다 : 지난 몇 일 동안

cmd = exc_path + ' ' + 'fs -put' + ' ' + src_path + item + ' ' + dst_path 
    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 
    code = process.wait() 
    logfile.info('type(code) is %s, code is %s\n', type(code), code) 

, 그것은 실행됩니다 확인. 그러나 그저께 그것은, code!=0 그런 다음 어제, 그것은 확인을 실행 한 code == 0을 반환하고 오늘은 실패하고 반환 type(code) is <type 'int'>, code is 255

기타 문서는 wait()가 0 또는 없음을 반환해야한다고 말했습니다 이렇게 왜 255를 얻을 수 ? 그리고 hadoop의 'put'cmd는 0 (성공시)과 -1 (실패 할 때)을 리턴해야합니다.

유용한 정보 : "슬프게도 shell = True를 사용하여 하위 프로세스를 실행할 때 wait()는 sh 하위 프로세스가 완료 될 때까지 기다리고 cmd 명령은 기다리지 않습니다." from

답변

0

255의 리턴 코드는 하둡 프로세스가 -1 리턴 코드 (나도 몰라입니다 이유)로 종료 것을 의미한다.

이유는 wait()이 -1을 제공하지 않기 때문입니다. 서브 프로세스가 신호 (신호 11로 인해 종료 된 경우 리턴 코드는 -11).

3

상무부 대기()가 0 또는 없음을 반환해야 말한다,하지만 난 255

을받을 이유는 잘못된 것입니다. 문서 내용 :

Popen.wait() 자식 프로세스가 종료 될 때까지 기다립니다. 리턴 코드 속성을 설정하고 리턴하십시오.

그리고

Popen.returncode 자식 반환 여론 조사에 의해 설정 코드() 및 대기() (간접적으로 의사 소통()). 없음 값은 프로세스가 아직 종료되지 않았 음을 나타냅니다. 음수 값 -N은 자식이 신호 N으로 종료되었음을 나타냅니다 (Unix에만 해당).

명령이 0이 아닌 종료 코드로 종료되면 가져옵니다.

그리고 hadoop의 'put'은 0 (성공시)과 -1 (실패 할 때)을 반환해야합니다.

당신이 255을받을 이유의 이러한 설명

오히려 -1은 매우 간단 이미 herehere을 설명했다. 기본적으로 종료 코드 (Java가 -1)로 서명 된 32 비트 값을 허용하는 Java 때문이지만 Posix 종료 상태는 부호없는 8 비트 값입니다.

요약하면, 0이 아닌 종료 코드는 명령이 실패했음을 알려줍니다. 특수 종료 코드를 확인하려면 코드가 0-255 범위가 아닌 경우 특별한주의가 필요합니다.

+0

대단히 감사합니다! 사실, hadoop의 cmd 'put'이 -1을 반환하는 상황을 알 수 있습니까? 파일이 동일한 크기의 서버에서 hadoop에 업로드되었는지 확인했습니다. 감사합니다. – yimao

관련 문제