Python-将可变参数传递给子进程的最佳方法.call

问题描述:

我正在尝试使用python脚本多次调用外部命令,每次都使用不同的变量。Python-将可变参数传递给子进程的最佳方法.call

我看到有建议使用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。

我刚刚开始使用python,所以很抱歉,如果这是非常基本的!

您试图在列表上使用modulo operator,我推测您希望对最后一个项目执行字符串格式设置,因为百分比符号被重载以使用字符串进行格式设置,但是您只是想要插入项目而没有任何格式,你可以把它直接:

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

如果你确实想使用的格式,你需要做的字符串:

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

不过请注意,这是没有意义的给定你没有做任何格式化。

+0

这很完美!非常感谢你,我确信它只是一些简单的! - 一个音符,为了使这个工作,我必须从调用函数中删除'shell = True',它不会影响我在这里虽然 – Rqomey 2012-04-18 12:44:21

+0

如果这回答你的问题,请随时[接受我的回答](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – 2012-04-18 12:51:05