0

关于 line 有什么问题的任何输入phCmd = "ph %s return all".split(' ') % (qgroup)?我正在尝试破译字符串%s

from subprocess import Popen, PIPE, STDOUT

def main ():
    qgroups = ['tech.sw.list','tech.sw.amss']
    for qgroup in qgroups:
        print qgroup
        phCmd = "ph %s return all".split(' ') % (qgroup)
        phPipe = Popen(phCmd, stdout=PIPE, stderr=PIPE)
        (output, error) = phPipe.communicate()
        print output
        if phPipe.returncode != 0:
            print output
            raise IOError, "phcommand %s failed" % (phCmd)
        return output

错误:

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    main()
  File "test.py", line 9, in main
    phCmd = "ph %s return all".split(' ') % (qgroup)
if __name__ == '__main__':
    main()
4

3 回答 3

3

字符串的.split(' ')方法调用返回一个列表。尝试类似的东西

phCmd = ("ph %s return all" % (qgroup)).split(' ')

反而。

于 2013-08-06T20:00:39.983 回答
2

将“%”与字符串一起使用时,您必须将其放在字符串之后。这行代码

phCmd = "ph %s return all".split(' ') % (qgroup)

实际上是告诉 Python 获取由返回的列表"ph %s return all".split(' ')并运行类似于以下内容的操作:

>>> 2 % 2
0
>>>

在它上面使用(qgroup),它爆炸了。要解决您的问题,请执行以下操作:

phCmd = ("ph %s return all" % qgroup).split(' ')
于 2013-08-06T20:27:09.013 回答
2
"ph %s return all".split(' ') % (qgroup)

split()调用返回一个列表,并且%对于参数类型列表和元组未定义。我不确定你在这里做什么,但看起来你想要:

("ph %s return all" % (qgroup)).split(' ') 
于 2013-08-06T19:59:29.247 回答