使用subprocess跨驱动器调用程序遇WinError 5权限拒绝,求解决方案
解决Python调用Go程序时的PermissionError问题
首先,先排查你的Python脚本里一个很容易踩坑的地方——subprocess.run的参数写法,这很可能是导致错误的根源,而不是真的权限问题:
你当前的代码里手动给路径加了引号,但当使用列表形式传参给subprocess.run时,不需要自己处理空格转义,subprocess会自动帮你处理带空格的路径。手动加引号会让系统把引号当成路径的一部分,导致无法正确识别程序路径,进而触发权限错误。
修正后的代码应该是这样:
import subprocess folderAdd = r"D:\Program Files (x86)\someapp" # 去掉末尾反斜杠,避免路径拼接出错 result = subprocess.run( [folderAdd + r"\someProgram.exe", folderAdd + r"\somefile.ext"], stdout=subprocess.PIPE, text=True # 可选,让输出转为字符串而非字节 ) print(result.stdout)
另外注意我去掉了folderAdd末尾的反斜杠,避免拼接路径时出现冗余的\\或者语法错误,后面拼接时手动加上\会更稳妥。
如果修正代码后还是出现权限错误,再试试下面这些排查步骤:
- 手动验证Go程序能否运行:打开管理员命令行,切换到
D:\Program Files (x86)\someapp目录,直接运行someProgram.exe somefile.ext。如果手动运行也报错,那问题出在Go程序本身或者文件/文件夹的权限设置上;如果手动能正常执行,那继续排查Python的调用问题。 - 检查文件夹和程序的权限:右键点击
someapp文件夹和someProgram.exe,选择「属性」->「安全」标签,确保当前用户(包括管理员账户)拥有「读取和执行」、「读取」的权限。Program Files目录的权限管控较严,可能需要手动添加用户权限。 - 尝试移到非系统目录测试:把Go程序和相关文件移到非系统盘的普通目录(比如
D:\test),再修改Python脚本的路径重新运行。系统目录的UAC限制可能会导致即使管理员身份也无法正常执行。 - 检查架构兼容性:如果你的Python是32位版本,而Go程序编译成了64位(或者反过来),可能会出现兼容性问题。尝试编译对应架构的Go程序,或者使用同架构的Python环境。
内容的提问来源于stack exchange,提问作者user6916458
相关产品推荐
相关产品推荐

