我正在尝试使用cd '/etc/yum.repos.d/'
curl 'https://copr.fedorainfracloud.org/coprs/scx/fusecompress/repo/epel-7/scx-fusecompress-epel-7.repo' > 'scx-fusecompress-epel-7.repo'
yum install -y 'fusecompress'
运行命令,但是从输出中看来,我提供的参数不是解释为字符串,而是解释为字符列表。
我正在尝试运行的命令:subprocess.check_call()
。
实际运行的是什么:
7z x test.rar
返回了非零退出状态2。
由于某种原因,文件名用字符分隔。我想念什么?
代码:
subprocess.CalledProcessError: Command '['7z', 'x', 't', 'e', 's', 't', '.', 'r', 'a', 'r']
答案 0 :(得分:0)
有关列表和字符串的文档非常准确地涵盖了这一点。 extend
将新元素放入列表,然后从包含单个字符串的列表开始。您从未使用过字符串串联运算符。试试这个,代替:
def extract_file(file_name):
extract_cmd = ["7z x " + file_name]
subprocess.check_call(extract_cmd)
注意:由于file
是内置类型,因此我更改了参数。
答案 1 :(得分:0)
您可以在此处执行两种方法:
subprocess.check_call(['7z', 'x', file])
或者如果您不太担心shell注入并且这是本地代码,则只需传递整个字符串即可:
subprocess.check_call('{} {} {}'.format('7z', 'x', file), shell=True)
其他人已经了解了为什么您在列表中看到“字符”。扩展将 listify 您的字符串(在这种情况下为file_name)并将其添加到列表的末尾。
a = [11]
a.extend('apples')
print a
输出:
[11, 'a', 'p', 'p', 'l', 'e', 's']