2015-02-02 3 views
4

작은 스크립트를 작성하여 디렉토리를 순차적으로 살펴보고 하위 디렉토리에서 명령을 실행합니다.파이썬 subprocess.Popen() 완료 대기

그러나 나는 Popen()에 문제가있어 디렉터리를 거쳐서 이전 명령이 끝날 때까지 기다리지 않고 원하는 명령을 실행합니다. 즉

for dir in dirs: 
    #run command on the directory here. 

이후 각별한주의를 기울여 명령을 실행합니다. 나는 그것이 현재의 것을 끝내기를 기다리고, 다음을 시작하기를 원한다. 디렉토리에서 사용하는 도구는 SANS SIFT의 Log2timeline입니다.이 도구는 꽤 오래 걸리고 꽤 많은 양의 출력을 생성합니다. 나는 출력에 관심이 없다, 나는 단지 프로그램이 다음에 시작되기 전에 기다리고 싶다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+0

관련이없는 바람직하지 않을 수도 있습니다 0이 아닌 리턴 코드가있는 경우 그 어떤 오류가 발생하지 않습니다, 서브 프로세스를 폐기하는 '출력 제대로 볼을 [출력을 숨기는 방법 subprocess of Python 2.7] (http://stackoverflow.com/q/11269575/4279) – jfs

답변

17

사용 Popen.wait는 popen에 설정되어있는 경우는 popen

그러나

대신 사용할 수 있습니다 :

process = subprocess.Popen(["your_cmd"]...) 
process.wait() 

또는 check_output, check_call 모두 당신이하고 싶은 일과 파이썬의 버전에 따라 리턴 코드를 기다린다.

파이썬> = 2.7을 사용하고 출력에 신경 쓰지 않는다면 check_call을 사용하십시오.

또한 call를 사용할 수 있지만 당신이 또는

4
subprocess.check_output(...) 

블록됩니다 ... 그리고 당신이

subprocess.Popen(...).communicate() 
프로세스가

반환 될 때까지

도 차단합니다

+1

'check_output'도'.communicate()'도 유용하지 않습니다 : * "[subprocess]는 꽤 많은 비트를 출력합니다. 나는 출력에 신경 쓰지 않는다. 'call()'또는'check_call()'이 대신 사용되어야합니다. – jfs

+0

ahh 좋은 지적 : 내가 읽지 않은 것에 대해 얻은 것은 ... that said ... 출력은 어쨌든이 예제들에서 버려지고있다. –