2014-12-23 4 views
1

을 완료 svn의 명령을 기다리고없는 경우 : 그proc.communiate()이 파이썬 코드

Start update 
svn update /data/home/vuser13/verify_and_merge_repo 
Finish update 
Updating 'verify_and_merge_repo': 
At revision 307. 

주의 사항 :

print "Start update" 
print " ".join(["svn","update",workspace_root) 
proc = subprocess.Popen(["svn","update",workspace_root]) 
proc.communicate() 
if (proc.returncode!= 0): 
    do_exit("Error trying to update "+workspace_root) 
print "Finish update" 

#의 CD 작업 공간

로는이 결과를 제공 proc.communicate()는 svn 명령이 완료 될 때까지 대기하지 않습니다.

안녕하세요. 이 작업이 완료되기를 기다리지 않기 때문에 오랜 작업에서 크론 작업이 너무 많이 수행되고 있습니다. subprocess.call()과 동일한 문제가 발생합니다.

감사합니다.

+0

당신은'proc.wait()'을 시도해 보셨습니까? –

+0

어떤 운영 체제입니까? 이런 종류의 일은 Windows에서 배치 파일 ('cron'은 힌트이지만 어쨌든 검사 함)을 사용하여 발생할 수 있습니다. – tdelaney

+0

Red Hat 6에서 실행 중입니다. 감사합니다! –

답변

1

Popenstdout=PIPE 인수를 주어야한다고 생각합니다. 루트 프로세스는 하위 프로세스가 결과를 반환 할 때까지 기다립니다.

더 여기 읽기 : https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate 특히이 비트 :

마찬가지로

는, 결과 튜플의 없음 이외의 얻으려면, 당신도 표준 출력 = PIPE 및/또는 표준 오류 = PIPE를 제공해야합니다.

+0

''communicate''와''call''은 모두 완료되기 전에'wait'를 호출합니다. 'stdout'을 리디렉션 할 필요가 없습니다. – tdelaney

+0

TIL. 고마워요! tdelaney – Nebril

+0

고마워! 그 일을 했어. –