2011-12-04 2 views
1

파이썬에서 두 개 (또는 그 이상)의 명령을 호출 할 수 있기를 원하지만 두 번째 시작 전에 첫 번째 명령이 완료되었는지 확인하고 싶습니다. subprocess으로 가능합니까? 예를 들면 :파이썬 내에서 후속 명령 실행하기

subprocess.call("script1 input1 > out", shell=True) 

때 그 명령이 완료 :

subprocess.call("script2 out>out2", shell=True) 

또는 더 나은 방법이?

답변

6

subprocess.call을 호출하면 명령이 완료 될 때까지 차단됩니다. documentation :

명령이 완료 될 때까지 기다렸다가 returncode 특성을 반환하십시오.

완료를 대기하는 유사한 옵션은 subprocess.check_call입니다. callcheck_call의 차이점은 후자가 0이 아닌 반환 코드에 대한 예외를 발생시키는 반면 전자는 모든 경우에 대한 반환 코드를 반환한다는 것입니다. documentation에서

+3

우수 대답. 그래도 check_call 보너스 포인트. –

+0

@BrianCain 제안 해 주셔서 감사합니다. 나는'subprocess.check_call'에 대한 정보를 포함하도록 답변했습니다. –

1

:

인수에 의해 기술 된 명령을 실행합니다. 명령이 완료 될 때까지 기다린 다음 returncode 속성을 반환하십시오. (당신 대기하지 않도록) 당신이 subprocess.Popen을 사용

는 비동기를 수행합니다.

0

셸 파이프 라인을 재현하려고합니까?

그래서, 다음의 example from the python docs 적응, 귀하의 예제가 될 수있는 경우 :

from subprocess import Popen, PIPE 
p1 = Popen([script1, input1], stdout=PIPE) 
p2 = Popen([script2], stdin=p1.stdout, stdout=PIPE) 
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. 
output = p2.communicate()[0] 
관련 문제