PermissionError:[Errno 13]权限被拒绝

Mar*_*itt 17 windows tkinter permission-denied python-3.x

我收到这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
return self.func(*args)
File "C:/Users/Marc/Documents/Programmation/Python/Llamachat/Llamachat/Llamachat.py", line 32, in download
with open(place_to_save, 'wb') as file:
PermissionError: [Errno 13] Permission denied: '/goodbye.txt'
Run Code Online (Sandbox Code Playgroud)

运行时:

def download():
    # get selected line index
    index = films_list.curselection()[0]
    # get the line's text
    selected_text = films_list.get(index)
    directory = filedialog.askdirectory(parent=root, 
                                        title="Choose where to save your movie")
    place_to_save = directory + '/' + selected_text
    print(directory, selected_text, place_to_save)
    with open(place_to_save, 'wb') as file:
        connect.retrbinary('RETR ' + selected_text, file.write)
    tk.messagebox.showwarning('File downloaded', 
                              'Your movie has been successfully downloaded!' 
                              '\nAnd saved where you asked us to save it!!')
Run Code Online (Sandbox Code Playgroud)

有人能告诉我我做错了什么吗?谢谢

规格:Python 3.4.4 x86 Windows 10 x64

Gul*_*zar 49

如果您尝试打开文件,但您的路径是文件夹,则会发生这种情况。

这很容易错误地发生。

为了防止这种情况,请使用:

import os

path = r"my/path/to/file.txt"
assert os.path.isfile(path)
with open(path, "r") as f:
    pass
Run Code Online (Sandbox Code Playgroud)

如果路径实际上是文件夹,则断言将失败。

  • 我希望最初的提问者能够接受这个答案。关于这个错误有很多很多的问题,这是唯一看起来真正正确的答案。尽管文件设置了正确的权限,但通常会出现此错误,因此答案必须是其他内容。就是这个。 (7认同)

Mix*_*one 13

编辑

我在回答中看到了一些活动,所以我决定对那些仍然存在此问题的人进行一些改进

execution在Windows 上实现管理员权限基本上有三种主要方法.

  1. 以管理员身份运行 cmd.exe
  2. 创建使用提升的权限执行文件的快捷方式
  3. 更改python可执行文件的权限(不推荐)

1)运行cmd.exeas和admin

由于在Windows中没有sudo命令,您必须以cmd.exe管理员身份运行terminal()以达到相当于的权限级别sudo.你可以这两种方式:

  1. 手动

    • 查找cmd.exeC:\Windows\system32
    • 右键单击它
    • 选择 Run as Administrator
    • 然后它将在目录中打开命令提示符 C:\Windows\system32
    • 前往您的项目目录
    • 运行你的程序
  2. 通过快捷键

    • 按Windows键(通常在alt和之间ctrl)+ X.
    • 将出现包含各种管理员任务的小弹出列表.
    • 选择 Command Prompt (Admin)
    • 前往您的项目目录
    • 运行你的程序

通过这样做,您作为管理员运行,所以这个问题不应该持续存在

2)使用提升的权限创建快捷方式

  1. 为其创建快捷方式 python.exe
  2. 右键单击快捷方式并选择 Properties
  3. 将快捷方式目标更改为类似的内容 "C:\path_to\python.exe" C:\path_to\your_script.py"
  4. 单击快捷方式属性面板中的"高级",然后单击"以管理员身份运行"选项

这个问题上由delphifirst提供的答案

3)更改python可执行文件的权限(不推荐)

这是一种可能性,但我强烈反对你这样做.

它只涉及查找python可执行文件并将其设置为每次都以管理员身份运行.可能并且可能会导致文件创建(它们只是管理员)或可能需要不是管理员运行的模块的问题.


小智 11

确保首先关闭您尝试写入的文件。

  • 请详细解释您的解决方案以更好地理解 (6认同)

dio*_*era 7

更改要保存的目录的权限,以便所有用户都具有读写权限.