我正在尝试使用 运行命令subprocess.check_call(),但从输出看来,我提供的参数并未解释为字符串,而是解释为字符列表。我试图运行的命令:7z x test.rar。实际运行的是什么:subprocess.CalledProcessError: Command '['7z', 'x', 't', 'e', 's', 't', '.', 'r', 'a', 'r'] 返回非零退出状态 2。出于某种原因,文件名以字符分隔。我错过了什么?代码:def main(): parser = argparse.ArgumentParser() parser.add_argument("input", help="File/Folder to extract") args = parser.parse_args() extract_file(args.input)def extract_file(file): extract_cmd = ['7z'] extract_cmd.extend('x') extract_cmd.extend(file) subprocess.check_call(extract_cmd)
2 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
列表和字符串的文档非常准确地涵盖了这一点。 extend
将新元素放入一个列表中,您从一个包含单个字符串的列表开始。您从未使用过字符串连接运算符。试试这个,而不是:
def extract_file(file_name): extract_cmd = ["7z x " + file_name] subprocess.check_call(extract_cmd)
注意:我更改了您的参数,因为file
是内置类型。
HUH函数
TA贡献1836条经验 获得超4个赞
你可以在这里做两种方法:
subprocess.check_call(['7z', 'x', file])
或者如果您不太担心 shell 注入并且这是本地代码,只需传递整个字符串:
subprocess.check_call('{} {} {}'.format('7z', 'x', file), shell=True)
其他人已经解释了为什么您会在列表中看到“字符”。扩展将列出您的字符串(在本例中为 file_name)并将其添加到列表的末尾。
a = [11]
a.extend('apples')
print a
输出:
[11, 'a', 'p', 'p', 'l', 'e', 's']
添加回答
举报
0/150
提交
取消