Python 7-Zip SubProcess - WindowsError: [Error 5] Access is denied

Python 7-Zip SubProcess - WindowsError: [Error 5] Access is denied

我的 Python 2.7 脚本出现 "WindowsError: [Error 5] Access is denied" 错误。访问被拒绝消息后没有列出任何文件夹。我不是管理员,但为目标 .7z 文件和输出文件夹设置了完整的 read/write/execute/modify 安全设置。相关代码如下:

if os.path.isfile(os.path.join(outRoot[0], outRoot[1] + "_photos.7z")):
    #Unzip photo folder
    import subprocess
    source = outFolder + "_photos.7z"
    pw = ''
    subprocess.call(['"C:\Program Files\7-Zip\7z.exe" x ' + source + ' -o' + outRoot[0] + ' -p' + pw])

您将包含单个条目的列表传递给 call(),但它应该是每个命令行选项的一个条目,即

subprocess.call([
    'C:\Program Files\7-Zip\7z.exe',
    'x',
    source,
    '-o' + outRoot[0],
    '-p' + pw
])

列表语法就在那里,所以你不必自己引用。子流程将为您完成。

您的代码所做的是告诉 Python 将整个命令行解释为要调用的程序的名称;这当然会失败。

Update:似乎 7-Zip 不喜欢选项名称后的空格。相应地更新了上面的示例代码。这不是 Python 问题,但它很好地演示了执行命令行的列表语法是如何工作的。列表中的每个元素都被视为单个选项并根据需要引用(例如,如果它包含空格)。选项由空格分隔。

为了调试,您可以将命令列表传递给 subprocess.list2cmdline() 以查看内部从列表创建的字符串。