2013-01-24 1 views
1

popen을 인자 목록으로 호출하려고합니다.파이썬 - 많은 인자를 가진 popen 호출하기

execString = "java -jar {} {} {} {} {} {}".format(os.path.join(config.java_root, 
                    config.java_jar), 
               self.canvasSize, 
               self.flightId, 
               self.domain, 
               self.defPath, 
               self.harPath) 
    execStringList = execString.split() 
    print execStringList 
    subprocess.Popen([execStringList]) 

execStringList이다 :

['java', '-jar', '/Users/me/Projects/reporting-test/build/clickunit-0.1.jar', '300x1050', '123', 'dev.me.net', '/Users/me/Projects/reporting-test/src/definitions/300x1050.yml', '/Users/me/Projects/reporting-test/out/01/15112'] 

에 따라 어느 : Python OSError: [Errno 2] 올바른 형식이다. 그러나, 나는 다음과 같은 오류 얻을 : 나는 터미널에서이 명령을 실행하면

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 672, in __init__ 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1202, in _execute_child 
OSError: [Errno 2] No such file or directory 

이 작동 비록 : 나는 문자열로 execString을 치료하는 경우

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 672, in __init__ 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1202, in _execute_child 
AttributeError: 'list' object has no attribute 'rfind' 

을, 나는 다른 오류가 발생합니다.

$> java -jar /Users/me/Projects/reporting-test/build/clickunit-0.1.jar 300x1050 123 dev.me.net /Users/me/Projects/reporting-test/src/definitions/300x1050.yml /Users/me/Projects/reporting-test/out/01/3727 

TIA!

편집

편집 편집

신경 끄시 고, 내가 문제를 참조하십시오. []...감사! heheh

+0

동일한 오류가 발생했습니다. (이 질문으로 인해 10 분이 절약되었습니다.) – nergeia

답변

6

execStringList은 이미 목록이므로 subprocess.Popen에 직접 전달할 수 있습니다.

execString = "java -jar {} {} {} {} {} {}".format(os.path.join(config.java_root, 
                   config.java_jar), 
              self.canvasSize, 
              self.flightId, 
              self.domain, 
              self.defPath, 
              self.harPath) 
execStringList = execString.split() 
print execStringList 
# Pass execStringList directly to Popen 
subprocess.Popen(execStringList) 
+0

부수적으로,이 모든 것을 문자열에 넣은 다음 볼 수있는 한 멀리 나눌 수있는 이점이 없습니다. – mgilson

+0

OP, nevermind. 네가 옳아. []을 (를) 내려다보고 있습니다 ... –