webentwicklung-frage-antwort-db.com.de

PermissionError: [Errno 13] Berechtigung verweigert

Ich erhalte diesen Fehler:

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'

Wenn Sie dies ausführen:

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

Kann mir jemand sagen, was ich falsch mache? Danke

Spezifikationen: Python 3.4.4 x86Windows 10 x64

8
Marc Schmitt

Ändern Sie die Berechtigungen des Verzeichnisses, in dem Sie speichern möchten, sodass alle Benutzer über Lese- und Schreibberechtigungen verfügen.

7
dione llorera

BEARBEITEN

Ich sehe ein bisschen Aktivität in meiner Antwort, also entschied ich mich, es für diejenigen mit diesem Problem noch ein wenig zu verbessern

Grundsätzlich gibt es drei Hauptmethoden, um unter Windows execution-Administratorrechte zu erlangen.

  1. Läuft als Admin von cmd.exe 
  2. Erstellen einer Verknüpfung zum Ausführen der Datei mit erhöhten Berechtigungen
  3. Ändern der Berechtigungen für die ausführbare Datei python (nicht empfohlen)

1) Ausführen von cmd.exe as und admin

Da es unter Windows keinen Sudo-Befehl gibt, müssen Sie das Terminal (cmd.exe) als Administrator ausführen, um die Berechtigungsstufe zu erreichen, die Sudo entspricht. Sie können dies auf zwei Arten tun:

  1. Manuell

    • cmd.exe in C:\Windows\system32 suchen
    • Klicken Sie mit der rechten Maustaste darauf
    • Run as Administrator auswählen
    • Es öffnet sich dann die Eingabeaufforderung im Verzeichnis C:\Windows\system32.
    • Gehen Sie zu Ihrem Projektverzeichnis
    • Führen Sie Ihr Programm aus
  2. Über Tastenkombinationen

    • Drücken Sie die Windows-Taste (normalerweise zwischen alt und ctrl) + X.
    • Eine kleine Popup-Liste mit verschiedenen Administratoraufgaben wird angezeigt.
    • Command Prompt (Admin) auswählen 
    • Gehen Sie zu Ihrem Projektverzeichnis
    • Führen Sie Ihr Programm aus

Auf diese Weise werden Sie als Administrator ausgeführt, sodass dieses Problem nicht bestehen bleiben sollte

2) Erstellen einer Verknüpfung mit erhöhten Berechtigungen

  1. Erstellen Sie eine Verknüpfung für python.exe
  2. Klicken Sie mit der rechten Maustaste auf die Verknüpfung und wählen Sie Properties aus.
  3. Ändern Sie das Verknüpfungsziel in etwas wie "C:\path_to\python.exe" C:\path_to\your_script.py".
  4. Klicken Sie im Eigenschaftenbereich der Verknüpfung auf "Erweitert" und klicken Sie auf die Option "Als Administrator ausführen".

Antwort beigetragen von delphifirst in diese Frage

3) Ändern der Berechtigungen für die ausführbare Datei python (nicht empfohlen)

Dies ist eine Möglichkeit, aber ich entmutige Sie sehr davon.

Sie müssen lediglich die ausführbare Datei python suchen und festlegen, dass sie jedes Mal als Administrator ausgeführt werden soll. Kann und wird wahrscheinlich Probleme mit der Dateierstellung (nur für Administratoren) oder möglicherweise mit Modulen verursachen, für die KEIN Administrator erforderlich ist.

7
Mixone

Dies ist mir auf einem Windows-Computer mit Pycharm passiert.

Der Fix: Klicken Sie mit der rechten Maustaste auf Ihre PyCharm-Anwendung und führen Sie sie als Administrator aus.

3
Emmanuel

Das Problem hierbei ist, dass Ihr Benutzer nicht über die richtigen Rechte/Berechtigungen verfügt, um die Datei zu öffnen. Dies bedeutet, dass Sie Ihrem python ide) einige Administratorrechte erteilen müssen bevor Sie diesen Befehl ausführen.

Als Windows-Benutzer müssen Sie nur Rechtsklick auf python ide => Wählen Sie die Option 'Als Administrator ausführen' = und führen Sie dann Ihren Befehl aus.

Und wenn Sie die Befehlszeile zum Ausführen der Codes verwenden, gehen Sie genauso vor Öffnen Sie die Eingabeaufforderung mit Administratorrechten.

1

Ich hatte ein ähnliches Problem. Ich verwende Anaconda unter Windows und löste es wie folgt: 1) Suchen Sie im Startmenü nach "Anaconda Prompt" 2) Klicken Sie mit der rechten Maustaste und wählen Sie "Als Administrator ausführen" 3) Folgen Sie der Installationsschritte ...

Dies kümmert sich um die Berechtigungsprobleme

0
Chinnappa Reddy

Stellen Sie sicher, dass die Datei, die Sie schreiben möchten, zuerst geschlossen wird.

0
Chrono Hax

Überprüfen Sie nochmals, ob die Datei, in die Sie schreiben möchten, nicht geöffnet ist oder dass ein Programm im Hintergrund diese Datei/Daten nicht festhält. Das war das Problem für mich.

0
aek8

PermissionError: [Errno 13] Berechtigung verweigert:

Ich habe den obigen Fehler festgestellt, als ich an Excel gearbeitet habe, und mein Excel war geöffnet, dann habe ich geschlossen und versucht, meinen Code auszuführen. Es hat bei mir funktioniert.

Ihre Datei muss geöffnet sein. Schließen Sie Ihre Datei und führen Sie den Code erneut aus, es sollte funktionieren.

0
Hariprasath

Das Problem könnte im Pfad der Datei liegen, die Sie öffnen möchten. Versuchen Sie, den Pfad auszudrucken und zu überprüfen, ob er in Ordnung ist. Ich hatte ein ähnliches Problem

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

aber nachdem Sie diesen Code hinzugefügt haben:

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

Es hat perfekt funktioniert

0
oyamo brian