2012-04-18 2 views
2

파이썬 스크립트를 사용하여 매번 다른 변수로 외부 명령을 호출하려고합니다.가변 인수를 subprocess.call에 전달하는 Python- 가장 좋은 방법

이 작업을 수행하기 위해 subprocess.call을 사용하는 것이 좋습니다. 그러나 필자가 찾은 모든 문서에는이 함수 변수를 전달하는 방법 (예 : 목록에서)을 설명하지 않습니다.

여러 가지 다른 형식을 시도했으며 대체가 가장 좋을 것이라고 생각하지만 함수가 변수를 허용하지 않는 것처럼 보입니다. 내가 작업을 얻을 수을 시도 을하고있는 코드는 다음과 같습니다

Traceback (most recent call last): 
File "./dnscheck.py", line 16, in <module> 
cmd_list = ['dig', '+short', '%s'] %arg 
TypeError: unsupported operand type(s) for %: 'list' and 'str' 

정말 내가 목록에 정의 된 다른 도메인의 무리를 (통과 할 수 있도록하려면 :

#!/usr/bin/python 
domain_list    = ["google.com", "google.ie"] 

from subprocess import call 

for x in domain_list: 
    print x 
    cmd_list  = ['dig', '+short', '%s'] %x 
    call(cmd_list, shell=True) 

이와 실패) 해당 도메인의 IP를 파고 수신합니다.

저는 파이썬으로 시작했습니다. 매우 근본적이라면 미안 해요!

답변

6

목록에 modulo operator을 사용하려고 시도하고 있는데, 마지막 항목에 문자열 서식을 지정하려고한다고 가정합니다. 백분율 기호가 문자열 서식 지정을 위해 오버로드되어 있지만 항목을 삽입하기 만하면되므로 서식은, 당신은 단지 직접 제공 할 수 있습니다 :

['dig', '+short', x] 

당신이 서식을 사용하려는 않은 경우, 당신은 문자열에 그것을 할 필요가있을 것이다 :이 주어진 무의미, 그러나

['dig', '+short', '%s' % x] 

주 당신은 어떤 포맷도하지 않고있다. .

+0

정말 고맙습니다. 정말 간단합니다. -이 기능을 사용하려면 통화 기능에서'shell = True'를 제거해야합니다. 효과가 없습니다. 나 여기있어 비록 – Rqomey

+0

귀하의 질문에 대한 답변을 원하시면 [내 대답 수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)을 자유롭게 선택하십시오. –

관련 문제