【问题标题】:Getting permission error when calling a program from another drive with subprocess使用子进程从另一个驱动器调用程序时出现权限错误
【发布时间】:2020-12-18 10:54:13
【问题描述】:

我有一个包含 4 行代码的脚本:

import subprocess

folderAdd = r"D:\Program Files (x86)\someapp\"

result = subprocess.run(['"' + folderAdd +'someProgram.exe"','"' + folderAdd +'somefile.ext"'], stdout=subprocess.PIPE)
print(result.stdout)

我稍微编辑了代码以删除文件/文件夹的细节(因为我认为这不是问题?)。 someProgram.exe 是我制作的 go lang 程序, somefile.ext 是我使用命令行传递给 go land 程序的文件(例如,命令行中的语法是:“someProgram.ext somefile.ext” . 我遇到的问题是当我运行这个脚本(它存储在我的 E 驱动器上 - 所以这是工作目录)时,我收到以下错误:

PermissionError: [WinError 5] Access is denied

我尝试在 spyder(我选择的 ide)和命令行中运行这个 python 脚本。这两个我都尝试过以管理员身份运行 (based on this question/answer)。我仍然得到相同的权限错误。有没有其他办法解决这个问题?

【问题讨论】:

  • 为什么要在 folderAdd 之前添加 '"' ?
  • 这里他们提到了所有可能的解决方案techisours.com/winerror-5-access-is-denied-fixed-completely享受
  • @CyrilJouve 我添加了 " 因为文件夹地址中有一个空格(程序文件,而不是程序文件)所以当我在 cmd 中使用它时它会失败!
  • @Cyber​​-Tech 感谢您的链接,但在完成每条建议后,我仍然遇到问题。我可以使用 print(...) 打印出命令并将其复制并粘贴到 cmd 中并且它可以工作,所以我确信路径等是正确的。我在 Windows 上,所以 chmod 不适用。

标签: python python-3.x permissions


【解决方案1】:

您正在添加不应该出现在此处的双引号。

您还应该使用 python 的工具加入路径:os.path.join (https://docs.python.org/3.8/library/os.path.html#os.path.join)

如果你只有什么stdout,你可以使用subprocess.check_outout (https://docs.python.org/3.8/library/subprocess.html#subprocess.check_output)

import subprocess

folderAdd = r"D:\Program Files (x86)\someapp"

print(subprocess.check_output([os.path.join(folderAdd, 'someProgram.exe'), os.path.join(folderAdd, 'somefile.ext'])

【讨论】:

  • 你测试过这个吗?当我尝试时它抛出了一个错误,因为文件夹地址中有一个空格
  • 我没有你的程序,但以下是有效的:subprocess.check_output(os.path.join('C:\Program Files\Mozilla Firefox', 'firefox.exe')) 它包含 2 个空格
  • 之前评论中的错字:subprocess.check_output([os.path.join('C:\Program Files\Mozilla Firefox', 'firefox.exe')])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多