Rechteproblem?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Gehen wir mal alles langsam an. Um die Basics und etwas fortgeschrittene Programmierung (Wenn man es so nennen darf) zu vertiefen, habe ich ein kleines Programm geschrieben:

Code: Alles auswählen

import os
import sys
import shutil as shu

try:
    os.makedirs("C:/AMDDRIVERSET")
    shu.move(sys.argv[0],"C:/AMDDRIVERSETZ")
    #Abfrage, ob Verzeichnis wirklich existiert
    if os.path.exists("C:/AMDDRIVERSET"):
        os.rename(sys.argv[0],"Driver.py")
    else:
        sys.exit(sys.argv[0])
    text=open("DRIVERINFO.txt","r+","w+","a+")
    text.write("Windows Version")
    text.write(sys.getwindowsversion())
    text.write("Version des Interpreters")
    text.write(sys.version)
    text.write("Verwendetes Betriebssystem")
    text.write(platform)
    text.close()
except:
    sys.exit(sys.argv[0])
Mir fehlen wieder die Rechte, aber kann sich die Py Datei nicht selber schließen? Würde mich interessieren!
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Das hat jetzt bitte was mit "OOP - erste Fragen" zu tun? Der Kontext will sich mir nicht so recht erschließen
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ja ich weiss. Ich will nicht für jede Kleinigkeit ein Thema aufmachen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nochmal, da es wohl noch nicht durchgekommen ist: "Geht nicht" ist keine hilfreiche Fehlerbeschreibung. Auch wenn du vielleicht nichts mit dem herausfallenden Traceback anfangen kannst, ist er fuer andere sehr hilfreich.

Ich sehe in deinem Code mindestens einen TypeError (lies mal, wie man `open` tatsaechlich benutzt) und einen NameError. Und dann rate ich mal, dass du das Programm nicht verschieben kannst. Das ist keine Python-Eigenart, sondern bei Windows zu verorten: Ist eine Datei geoeffnet, kann man sie nicht loeschen. Gleiches gilt fuer verschieben.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Gary123456 hat geschrieben:Ja ich weiss. Ich will nicht für jede Kleinigkeit ein Thema aufmachen.
Neue Thmen kosten nichts, alte Themen offtopic zu befuellen schadet aber der Suchbarkeit.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

In open sehe ich keinen Fehler. Ich habe das genauso gemacht wie im Buch. Einen kleinen Fehler habe ich gefunden und korregiert. Kann man eine Datei während des Laufens umbennen?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich zitiere einfach mal aus einem anderen Thread
Sr4l hat geschrieben:Auch solltest du über deine ausnahmslosen excepts nachdenken. So erfährst du nicht genau was passiert.
Gary123456 hat geschrieben:Ist mir alles bewusst. Except alles bewusst gewählt, keine Sorge. Werde am Ende des Programms das alles ändern. :)
Das Leben ist wie ein Tennisball.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Und ich ergänze noch was zu open:

Code: Alles auswählen

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Du kannst nur einen "mode" setzen und nicht mehrere. http://docs.python.org/dev/library/functions.html#open

Dir sollte auch klar sein das du entweder Dateioperationen ausführst, verschieben, löschen ... (shutil) oder die Datei öffnest um in sie zu schreiben (open).
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Gary123456 hat geschrieben:In open sehe ich keinen Fehler. Ich habe das genauso gemacht wie im Buch.
Dann ist entweder der Code im Buch falsch oder du hast dich verlesen. Wie Sr4l mit der Signatur gezeigt hat: Du verwendest es falsch.
Gary123456 hat geschrieben:Kann man eine Datei während des Laufens umbennen?
cofi hat geschrieben:Und dann rate ich mal, dass du das Programm nicht verschieben kannst. Das ist keine Python-Eigenart, sondern bei Windows zu verorten: Ist eine Datei geoeffnet, kann man sie nicht loeschen. Gleiches gilt fuer verschieben.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

ein paar Kommentare:

Code: Alles auswählen

import os
import sys
import shutil as shu

es gibt komischerweise ein paar Module, deren Namen gerne umbenannt werden (tkinter ->tk, xml.etree.ElementTree -> ET, numpy -> np), aber dass shutil shu heißt ist mir neu.

Code: Alles auswählen

 
try:
    os.makedirs("C:/AMDDRIVERSET")
schlägt fehl, falls das Verzeichnis schon existiert und schon sind wir kommentarlos am Ende.

Code: Alles auswählen

 
    shu.move(sys.argv[0],"C:/AMDDRIVERSETZ")
jetzt erstellen wir ein weiteres Verzeichnis, das verschieben der gerade ausgeführten Datei schlägt allerdings fehl, da geöffnete Dateien unter Windows nicht bewegt werden können -> Ende

Code: Alles auswählen

 
    #Abfrage, ob Verzeichnis wirklich existiert
    if os.path.exists("C:/AMDDRIVERSET"):
sollte das Verzeichnis innerhalb der letzten zwei Zeilen wieder verschwunden sein, falls ja, könnte es auch eine Zeile später passieren, gemein.

Code: Alles auswählen

 
        os.rename(sys.argv[0],"Driver.py")

hätten wir es doch geschafft, uns selbst mit shu.move zu verschieben, würde dieses rename garantiert fehlschlagen, und Ende. Spannend wärs aber schon, wo Driver.py landet.

Code: Alles auswählen

 
    else:
        sys.exit(sys.argv[0])
    text=open("DRIVERINFO.txt","r+","w+","a+")
zu open, siehe Kommentare oben.

Code: Alles auswählen

    text.write("Windows Version")
    text.write(sys.getwindowsversion())
    text.write("Version des Interpreters")
    text.write(sys.version)
    text.write("Verwendetes Betriebssystem")
    text.write(platform)
    text.close()

Dummerweise macht write keine Zeilenumbrüche, also hängen wir alle Zeichenketten ohne Abstand aneinander. open wird gerne mit with benutzt, dann braucht man auch keine Sorgen um das close haben.

Code: Alles auswählen

 
except:
    sys.exit(sys.argv[0])

Und jetzt habe ich wieder was Neues gelernt, sys.exit nimmt auch Strings als Parameter. Dachte erst, das müsste falsch sein, ist es aber nicht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

/me hat geschrieben:Das hat jetzt bitte was mit "OOP - erste Fragen" zu tun? Der Kontext will sich mir nicht so recht erschließen
Nichts, deswegen habe ich das auch gesplittet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Hallo,
Dann ist entweder der Code im Buch falsch oder du hast dich verlese
Nochmal nachgeschaut. Im Buch steht das falsch. Es steht da, dass man mit dieser Funktion gleich mehrere Rechte hat (Lesen + schreiben)

Und zum Umbennen:
Und dann rate ich mal, dass du das Programm nicht verschieben kannst. Das ist keine Python-Eigenart, sondern bei Windows zu verorten: Ist eine Datei geoeffnet, kann man sie nicht loeschen. Gleiches gilt fuer verschieben.
Das beantwortet meine Frage nicht.
hätten wir es doch geschafft, uns selbst mit shu.move zu verschieben, würde dieses rename garantiert fehlschlagen, und Ende. Spannend wärs aber schon, wo Driver.py landet.

... und das auch nicht ganz.

Das löschen + verschieben nicht geht, habe ich mittlerweile verstanden. Aber warum geht Umbennen nicht?
es gibt komischerweise ein paar Module, deren Namen gerne umbenannt werden (tkinter ->tk, xml.etree.ElementTree -> ET, numpy -> np), aber dass shutil shu heißt ist mir neu.
Sollte doch egal sein wie ich es nenne. Wenn z.B. das importiere: import math as a . ist es doch egal ob man es a, b, c .... nennt?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Gary123456 hat geschrieben:Das löschen + verschieben nicht geht, habe ich mittlerweile verstanden. Aber warum geht Umbennen nicht?
Umbenennen _ist_ verschieben.

Das sollte klar werden, wenn man sich die Dokumentation zu `shutil.move` anschaut: http://docs.python.org/2/library/shutil ... hutil.move

In der Hinsicht noch die Anmerkung (und weil es auch bei `open` auftauchte): Man sollte keine Funktion benutzen zu der man nicht die Dokumentation kennt. Und nein, Drittquellen wie Buecher sind hier auch keine Option, weil sie sich u.U. nicht auf dieselbe Version beziehen. Mit `help(open)` kann man sogar im Interpreter komfortabel den Docstring lesen und bekommt zumindest das elementarste der Dokumentation.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Gary123456 hat geschrieben:
Dann ist entweder der Code im Buch falsch oder du hast dich verlese
Nochmal nachgeschaut. Im Buch steht das falsch. Es steht da, dass man mit dieser Funktion gleich mehrere Rechte hat (Lesen + schreiben)
Ich habe gerade mal in der Online-Ausgabe nachgeschaut. Du scheinst die Tabelle falsch zu interpretieren.
Gary123456 hat geschrieben:Das löschen + verschieben nicht geht, habe ich mittlerweile verstanden. Aber warum geht Umbennen nicht?
Umbennenen entspricht Verschieben. Du verschiebst die Datei, nur in selben Verzeichnis.
Gary123456 hat geschrieben:Sollte doch egal sein wie ich es nenne. Wenn z.B. das importiere: import math as a . ist es doch egal ob man es a, b, c .... nennt?
Natürlich ist es egal wie du es nennst, man sollte sich aber an Standards und Konventionen halten. Das macht das Lesen deines Codes einfacher. Im konkreten Fall ist "shu" schlechter als "shutil". Es ist keine Konvention, man muss oben im Modul nachschauen was "shu" ist und im Endeffekt spart man nur 3 Zeichen beim Namen.
Das Leben ist wie ein Tennisball.
BlackJack

@Gary123456: Die Benennung ist dem Compiler egal solange es eindeutig ist, aber uns Lesern ist das nicht egal. Denn wir wollen den Quelltext möglichst einfach lesen und verstehen können und hätten deshalb nicht so gerne kryptische Abkürzungen.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

OK vielen Dank für eure Antworten. Werde mir das Thema Dateien noch mal ganz genau durchlesen, dann vll ein kleines Anfängergame bauen und dann gehts zu OOP. :)
Antworten