【问题标题】:PermissionError: [WinError 5] Access deniedPermissionError: [WinError 5] 访问被拒绝
【发布时间】:2020-05-03 17:45:09
【问题描述】:

我正在尝试使用subprocess 调用python 程序,但出现权限错误。我尝试以管理员身份运行 PyCharm,但没有帮助。

我的代码:

answer = subprocess.check_output("../folder python program %s %s" %(valueA, valueB), encoding = 'utf8')

错误:

Traceback (most recent call last):
  File "C:/Users/User/PycharmProjects/a/b/b_resolution.py", line 35, in <module>
    answer = subprocess.check_output("../folder python program %s %s" %(valueA, valueB), encoding = 'utf8')
  File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\Lib\subprocess.py", line 376, in check_output
    **kwargs).stdout
  File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\Lib\subprocess.py", line 453, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\Lib\subprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\Lib\subprocess.py", line 1155, in _execute_child
    startupinfo)
PermissionError: [WinError 5] Access Denied

有人知道我该如何解决这个权限错误吗?

【问题讨论】:

    标签: python windows file permissions subprocess


    【解决方案1】:

    如果您(不小心)尝试运行目录而不是文件,也会出现这种令人困惑的PermissionError

    例如,其中任何一个都会引发PermissionError: [WinError 5] Access is denied

    subprocess.check_output('.')
    
    subprocess.run('.')
    

    另一方面,如果你尝试运行一个不存在的文件,你会得到一个更有用的FileNotFoundError: [WinError 2] The system cannot find the file specified

    【讨论】:

      【解决方案2】:

      我自己解决了问题,python 命令位于路径之前。 像这样:

      answer = subprocess.check_output("python ../folder program %s %s" %(valueA, valueB), encoding = 'utf8')
      

      但我遇到了它所说的问题:

      can't find '__main__' module in '../pydig'
      

      通过在路径中写入程序名称也解决了这个问题:

      answer = subprocess.check_output("python ../folder/program %s %s" %(valueA, valueB), encoding = 'utf8')
      

      【讨论】:

      • 使用参数列表,subprocess 将根据程序遵循 VC++ 命令行解析规则的假设为您处理任何需要的引用,python.exe 本身肯定使用该规则,因为它是用 VC++ 构建的。
      • 如果您在 3.7+ 中使用 UTF-8 模式(例如 python -X utf8)或定义 PYTHONIOENCODING 环境变量以使用 UTF-8,那么 Python 会将 UTF-8 写入管道在 Windows 中。否则,默认情况下,当 stdout 是管道时,Windows 中的 Python 脚本使用系统 ANSI 代码页(例如,西欧语言环境中的“cp1252”),在这种情况下,通过encoding='utf8' 解码通常对于非 ASCII 文本会失败。在 Windows 10 中,ANSI 可能设置为 UTF-8,但这不是默认设置。
      【解决方案3】:

      检查当前用户的文件权限。

      右击文件,在安全中你可以看到用户的文件权限。

      如果你没有读取文件的权限,高级 > 选择一个主体然后check this doc.

      【讨论】:

      • OP 正在尝试执行一个名为“../folder”的目录。 Windows 会因为访问被拒绝而失败,在这种情况下,这与安全性无关。
      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2018-02-10
      • 2016-11-06
      • 2023-03-27
      相关资源
      最近更新 更多