猿问

字符列表而不是 Python 中的字符串

我正在尝试使用 运行命令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)


守着一只汪
浏览 145回答 2
2回答

交互式爱情

列表和字符串的文档非常准确地涵盖了这一点。 extend将新元素放入一个列表中,您从一个包含单个字符串的列表开始。您从未使用过字符串连接运算符。试试这个,而不是:def extract_file(file_name):     extract_cmd = ["7z x " + file_name]     subprocess.check_call(extract_cmd)注意:我更改了您的参数,因为file是内置类型。

HUH函数

你可以在这里做两种方法: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']
随时随地看视频慕课网APP

相关分类

Python
我要回答