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()
以查看内部从列表创建的字符串。
我的 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()
以查看内部从列表创建的字符串。