2012-06-01 3 views
1

다른 파일에서 가져온 매개 변수가있는 명령 행 프로그램을 실행하기 위해 python 스크립트를 작성하려고합니다. 다음과 같이 프로그램의 명령 줄 인터페이스 작동 : ./executable.x 매개 변수 (a)는 매개 변수 (b)는 매개 변수 (C) ...Python : 다른 파일의 매개 변수로 외부 프로그램을 실행하는 방법은 무엇입니까?

내 코드는 다음과 같습니다

#program to pass parameters to softsusy 
import subprocess 
#open parameter file 
f = open('test.dat', 'r') 
program = './executable.x' 
#select line from file and pass to program 
for line in f: 
    subprocess.Popen([program, line]) 

테스트. dat 파일은 다음과 같이 보입니다 :

param(a) param(b) param(c)... 

스크립트는 프로그램을 호출하지만 변수를 전달하지 않습니다. 내가 뭘 놓치고 있니?

답변

1

당신이 원하는 :

line=f.readline() 
subprocess.Popen([program]+line.split()) 

현재 하나의 인수로 프로그램의 전체 라인을 통과 할 것이다 무엇을 가지고.

with open('test.dat','r') as f: 
for line in f: 
    #you could use shlex.split(line) as well -- that will preserve quotes, etc. 
    subprocess.Popen([program]+line.split()) 
+0

: (소스 파일이 짧은 경우) 확인

는 명시 적으로 목록에 파일을 켜고 데이터가 "라인"에서이 있는지 시도해보십시오. 도와 주셔서 감사합니다. – user1431534

+0

하위 프로세스의 결과를 파일로 저장하는 방법은 무엇입니까? – user1431534

+0

파일 오브젝트를 생성하고 ('outputfile = open ('output.txt', 'w')'),'stdout' 키워드를 사용하여 Popen에 넘겨 준다. ('subprocess.Popen (arglist, stdout = outputfile)') – mgilson

0

로 시작하려면 당신이 경우에, 사용 subprocess.call, (당신이 파일의 각 행에 대해 한 번 프로그램을 호출 할 경우, 물론 program "arg1 arg2 arg3"

로 쉘을 호출하는 등의() not subprocess.popen()

"params not passed"스크립트에는 분명히 잘못된 것은 없습니다. 긴 문자열로 연결하고 list 대신 .call()에 문자열을 제공하십시오. .

subprocess.call(program + " " + " ".join(line)) 

line에 포함될 것으로 기대되는 데이터가 포함되어 있습니까? 완벽하게 작동

for line in file.readlines(): 
    if len(line.trim().split(" ")) < 2: 
     raise Exception("Where are my params?") 
+0

줄에는 파일의 한 줄이 들어 있습니다. 라인이 "안녕하세요"라면 솔루션은 "h l l l o"를 각각 인수로 전달합니다. 그리고'Popen'을 사용할 때 진짜 문제는 없습니다 -'call'을 사용하는 것은'Popen'을 둘러싼 포장지 일뿐입니다. – mgilson

+0

또한, 문자열에 trim 메소드가 없으므로'line.trim()'은 AttributeError를 발생시킵니다. (적어도 파이썬 2.6에는 없다). 'line.split()'는 잘 작동 할 것이다. – mgilson

관련 문제