为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2021-07-16 18:19:41
我正在尝试使用 运行命令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是内置类型。


查看完整回答
反对 回复 2021-07-28
?
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']


查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信