2011-08-04 6 views
9

다음과 같은 명령 줄에서 실행하는 프로그램이 있습니다.파이썬을 사용하여 다른 프로그램을 실행 하시겠습니까?

$ program a.txt b.txt

프로그램에는 두 개의 텍스트 파일이 인수로 필요합니다. 위의 프로그램을 실행하기 위해 Python 3.2 스크립트를 작성하려고합니다. 어떻게해야합니까? 현재, subprocess 모듈을 다음과 같이 사용하려고합니다.

import subprocess 

with open("a.txt", mode="r") as file_1: 
    with open("b.txt", mode="r") as file_2: 
     cmd = ['/Users/me/src/program', file_1, file_2] 
     process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
     for line in process.stdout: 
      print(line) 

this posthere (내 문제와 유사한 해결책을 설명하는 것처럼 보임)을 읽습니다. 불행히도이 게시물을 읽은 후에도 파이썬 코드가 내 프로그램을 실행하지 못하는 것 같습니다.

아무도 도와 줄 수 있습니까? 미리 감사드립니다!

답변

14

subprocess.Popen에는 문자열 배열이 필요합니다. 해당 배열의 항목 중 두 개는 파일 핸들입니다. 실제 파일 을 실행하려는 프로그램에 전달해야합니다.

cmd = ['/Users/me/src/program', 'a.txt', 'b.txt'] 

with open(...) as ... 행은 완전히 제거 할 수 있습니다.

+0

도움을 주셔서 감사합니다. 어떻게 든'subprocess.Popen()'에는 파일 핸들이 아닌 문자열이 필요합니다. 당신의 솔루션은 매력처럼 작동했습니다! – drbunsen

5

요구 사항에 따라 os.system(cmdline)이 간단한 해결책 일 수 있습니다. 또한

13

@Chris's answer에서 봐, 그리고 :

하위 프로세스가 종료 명령을 기다리지 않습니다, 그래서 당신은 wait 방법을 사용해야합니다.

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
    process.wait() 
    for line in process.stdout: 
     print(line) 
+2

'wait'메소드를 지적 해 주셔서 감사합니다. – drbunsen

+0

아직 실행중인 줄을 원하면 내 대답을 참조하십시오. – agf

관련 문제