PermissionError:[Errno 13]权限被拒绝

时间:2016-04-05 18:54:22

标签: windows python-3.x tkinter permission-denied

我收到此错误:

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'

运行时:

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!!')

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

规格: Python 3.4.4 x86 Windows 10 x64

20 个答案:

答案 0 :(得分:10)

修改

我看到我的回答有点活动,所以我决定对那些仍有这个问题的人进行一些改进

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

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

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

    1. 手动

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

      • 按下Windows键(通常在altctrl之间)+ X
      • 将显示包含各种管理员任务的小型弹出式列表。
      • 选择Command Prompt (Admin)
      • 前往您的项目目录
      • 运行程序
    3. 通过执行此操作,您将以管理员身份运行,因此此问题不应继续存在

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

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

        中的delphifirst提供的答案

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

        的权限

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

如果您尝试写入文件,但是您的路径是文件夹,也会发生这种情况。

这很容易出错。

要对此进行防御,请使用:

import os

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

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

答案 3 :(得分:3)

在使用Pycharm的Windows机器上发生了这种情况。

修复:右键单击PyCharm应用程序并以管理员身份运行。

答案 4 :(得分:3)

您可以以管理员身份运行CMD,并使用cacls.exe更改目录的权限。例如:

cacls.exe c: /t /e /g everyone:F # means everyone can totally control the C: disc

答案 5 :(得分:1)

我有类似的问题。我认为可能与系统有关。但是,使用shutil.copytree()模块中的shutil为我解决了这个问题!

答案 6 :(得分:1)

问题可能出在您要打开的文件的路径中。尝试并打印路径,看看是否合适 我有类似的问题

def scrap(soup,filenm):
htm=(soup.prettify().replace("https://","")).replace("http://","")
if ".php" in filenm or ".aspx" in filenm or ".jsp" in filenm:
    filenm=filenm.split("?")[0]
    filenm=("{}.html").format(filenm)
    print("Converted a  file into html that was not compatible")

if ".aspx" in htm:
    htm=htm.replace(".aspx",".aspx.html")
    print("[process]...conversion fron aspx")
if ".jsp" in htm:
    htm=htm.replace(".jsp",".jsp.html")
    print("[process]..conversion from jsp")
if ".php" in htm:
    htm=htm.replace(".php",".php.html")
    print("[process]..conversion from php")

output=open("data/"+filenm,"w",encoding="utf-8")
output.write(htm)
output.close()
print("{} bits of data written".format(len(htm)))

但添加此代码后:

nofilenametxt=filenm.split('/')
nofilenametxt=nofilenametxt[len(nofilenametxt)-1]
if (len(nofilenametxt)==0):
    filenm=("{}index.html").format(filenm)

效果很好

答案 7 :(得分:1)

这里的问题是您的用户没有适当的rights/permissions打开文件,这意味着您需要在运行该命令之前为python ide授予一些管理特权。

由于您是Windows用户,只需 右键单击python ide =>选择选项“以管理员身份运行” ,然后运行命令。

如果您使用命令行来运行代码,请执行相同的 具有管理员权限的命令提示符

答案 8 :(得分:0)

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

答案 9 :(得分:0)

PermissionError:[Errno 13]权限被拒绝:

在使用excel时遇到上述错误,我的excel已打开,然后关闭并尝试运行我的代码。它对我有用。

您的文件必须打开。关闭文件,然后再次运行代码,它应该可以工作。

答案 10 :(得分:0)

就我而言。我只是将.idlerc目录隐藏了。 因此,我要做的就是访问该目录,然后使recent-files.lst不再隐藏,问题就解决了

答案 11 :(得分:0)

仔细检查并确保您要写入的文件未打开,或者后台的某些程序未保留该文件/数据。这是我的问题。

答案 12 :(得分:0)

另一个帮助我的选择是使用pathlib:

from pathlib import Path
p = Path('.') ## if you want to write to current directory
with open(p / 'test.txt', 'w') as f:
  f.write('test message')

它有效

答案 13 :(得分:0)

我遇到了类似的问题。我在Windows上使用Anaconda,并按以下方式解决了它: 1)从开始菜单中搜索“ Anaconda提示” 2)右键单击并选择“以管理员身份运行” 3)按照安装步骤进行操作...

这可以解决权限问题

答案 14 :(得分:0)

在我的情况下,问题是我隐藏了文件(文件已隐藏属性):
如何在python中处理问题:

import os

# This is how to hide the file
os.system(f"attrib +h {filePath}")
file_ = open(filePath, "wb")
>>> PermissionError <<<


# and this is how to show it again making the file writable again:
os.system(f"attrib -h {filePath}")
file_ = open(filePath, "wb")
# This works

# and just to let you know there is also this way
# so you don't need to import os
import subprocess
subprocess.check_call(["attrib", "-H", _path])


答案 15 :(得分:0)

就我而言,

我在Microsoft应用商店中安装了ubuntu。

是这个。 enter image description here

我也在那里安装了python。

那是问题。因此发生了错误。

在我的ubuntu操作系统中删除了python之后,我解决了问题。

已添加: 并删除或重命名此路径的点。 enter image description here

已添加_2 真正解决了问题。 问题是V3在pip文件上看到了。 因此,permissoin被拒绝了。

做这样的设置:) v3上的python路径除外。 enter image description here

答案 16 :(得分:0)

使用keras.preprocessing.image时实际上也会出现此错误,例如:

   img = keras.preprocessing.image.load_img(folder_path, target_size=image_size)

将引发权限错误。但是,足够奇怪的是,如果您首先导入库from keras.preprocessing import image,然后才使用它,则可以解决问题。像这样:

img = image.load_img(img_path, target_size=(180,180))

答案 17 :(得分:0)

这是我遇到错误的方式:

import os

path = input("Input file path: ")

name, ext = os.path.basename(path).rsplit('.', 1)
dire = os.path.dirname(path)

with open(f"{dire}\\{name} temp.{ext}", 'wb') as file:
    pass

如果用户输入包含多个元素的文件路径,则效果很好,例如

C:\\Users\\Name\\Desktop\\Folder

但我认为它适用于像

这样的输入
file.txt

只要file.txt在python文件的同一个目录下。但是不,它给了我那个错误,我意识到正确的输入应该是

.\\file.txt

答案 18 :(得分:0)

正如@gulzar 所说,我在位于 'abc.txt' 的 python 脚本中写入文件 Z:\project\test.py 时遇到问题:

with open('abc.txt', 'w') as file:
    file.write("TEST123")

实际上,每次我运行脚本时,它都想在我的 C 驱动器中创建一个文件而不是 Z! 所以我只指定了文件名的完整路径:

with open('Z:\\project\\abc.txt', 'w') as file: ...

效果很好。我无需在 Windows 中添加任何权限或更改任何内容。

答案 19 :(得分:0)

这是一个棘手的问题,因为错误消息会引诱您远离问题所在。

当您在权限错误的根源处看到导入模块的 "__init__.py" 时,您就有了命名冲突。我喝了一瓶朗姆酒,有 {{1} } 在文件的顶部。在 TKinter 内部,有一个变量、类或函数的名称,这些名称已经在脚本的其他任何地方使用。

其他症状是:

  1. 脚本运行后立即提示错误。
  2. 该脚本可能在以前的 Python 版本中运行良好。
  3. 用户 Mixon 关于管理员执行权限的长篇文章根本没有影响。从控制台或其他软件访问代码中提到的文件不会出现访问错误。

解决方案: 将导入行更改为“import tkinter”,并将命名空间添加到代码中的 tkinter 方法中。