以下代码显示运行以下代码时的属性错误。 import subprocess import sys import shlex
cmd = 'mtr -nrc30 -s1400 -z'
cmd = shlex.split(cmd)
abc = shlex.split(sys.argv[1])
subprocess.call([cmd,abc])
我得到的错误在下面。当子进程的输入都转换为列表时,可能的原因是什么
AttributeError:'list'对象没有属性'rfind'
为了帮助其他人提出同样的问题:这里的问题是:
subprocess.call([cmd, abc])
其中abc
是你想要给cmd
中指定的程序的参数列表,这些参数是通过sys.argv
提供给你的程序的。然后,您当前的代码最终解压缩到以下内容:
# assume abc == ['arg1', 'arg2', ...]
subprocess.call([['mtr', '-nrc30', '-s1400', '-z'], ['arg1', 'arg2', ...]])
这不起作用,因为它是一个嵌套列表。子进程只接受字符串或字符串列表 - 所以,为了使它工作,你真正想要的是
subprocess.call(['mtr', '-nrc30', '-s1400', '-z', 'arg1', 'arg2', ...])
这可以通过简单地使用+
连接两个列表来获得:
subprocess.call(cmd + abc)