2013-10-30 7 views
8

제대로 작업하는 방법에 대한 힌트가 필요합니다.subprocess.Popen : 목록을 인수로 전달하는 방법

나는 "[name1", "name2"등] 인수로 이름 목록을 사용하는 script.py라는 스크립트가 있다고 가정 해보십시오.

하위 프로세스 모듈을 사용하여 다른 스크립트에서이 스크립트를 호출하고 싶습니다. subprocess.Popen 방법은 인수로 문자열 목록을 필요로하기 때문에 작동하지 않습니다 물론

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py", myList]) 

: 그래서 내가 뭘하고 싶은 다음이다. 그래서 나는 다음과 같은 일을 생각 : 이제 프로세스가 시작

subprocess.Popen(["python", "script.py", str(myList)]) 

을하지만이 인수로 문자열이 아닌 목록을 가지고 있기 때문에 작동하지 않습니다. 어떻게 제대로 수정해야합니까?

답변

19

+ 연산자를 사용하여 연결하십시오. 이 같은 파이썬 프로그램을 사용하려는 경우

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py"] + myList) 

BTW, sys.executable으로 "python"를 교체합니다.

+0

또는 추가 인수의 유형이 확실하지 않은 경우'.extend()'를 사용하십시오. –

+0

@NiklasR 또는'+ list (myList)' – falsetru

+1

'extend'는 호출하기 전에 이름이 지정된 목록을 수정하는 경우에만 유용합니다. 'subprocess.Popen ([ ""python ","script.py "]. extend (myList)))''Popen()'의 첫 번째이자 유일한 인수로''None'' ('extend'의 반환 값)을 전달합니다. – chepner

1

빠른 답장을 보내 주셔서 감사합니다. 그것은 직접 작동하지 않지만 어떻게해야하는지 이해합니다. 당신은 제안 일에 해당 위치 : 나는 내 원래 목록에 포함 된 문자열 3 개 인수를

subprocess.Popen(["Python","script.py","name1","name2","name3"]) 

.

내가 내 script.py 파일에해야 할 일은 다음을 수행하여받은 각 인수에서 새 목록을 구축하는 것입니다 :

myList = sys.argv[1:] 

myList에 지금 내가 처음에했던 것과 동일합니다!

["name1","name2","name3"] 

내가 이전에 그것에 대해 생각하지 않은 이유를 모르겠다!

관련 문제