python中的子进程显示属性错误

问题描述 投票:0回答:1

以下代码显示运行以下代码时的属性错误。 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'

python module subprocess
1个回答
1
投票

为了帮助其他人提出同样的问题:这里的问题是:

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)
© www.soinside.com 2019 - 2024. All rights reserved.