Python mkdir geben mir falsche Berechtigungen
-
06-07-2019 - |
Frage
Ich versuche, einen Ordner zu erstellen, und erstellen Sie eine Datei in es.
Wenn ich erstellen Sie diesen Ordner (über Python), es erstellt einen Ordner, der gibt mir keine Berechtigungen überhaupt und nur-Lesen-Modus.
Wenn ich versuche, die Datei zu erzeugen, bekomme ich eine IOError.
Error: <type 'exceptions.IOError'>
Ich habe versucht, die Schaffung (und-Suche) für eine Beschreibung von allen anderen Modi (außer 0770).
Kann mir jemand Licht?Was sind die anderen-Modus-codes?
Lösung
Nachdem Sie den Ordner erstellen Sie die Berechtigungen mit os.chmod
festlegen
Der Mod ist in der Basis 8 geschrieben, wenn Sie es konvertieren, um zu binäre es wäre
000 111 111 000
rwx rwx rwx
Der erste rwx
für Eigentümer ist, ist die zweite für die Gruppe und die dritte ist für Welt
r = lesen, w = schreiben, x = ausführen
Die Berechtigungen, die Sie am häufigsten zu sehen sind
7 Lesen / Schreiben / Ausführen - Sie müssen ausführen für Verzeichnisse der Inhalt sehen
6 Lese- / Schreib
4 Read-only
Wenn Sie os.chmod
verwenden es am sinnvollsten Oktalschreibweise zu verwenden
so
os.chmod('myfile',0o666) # read/write by everyone
os.chmod('myfile',0o644) # read/write by me, readable for everone else
Denken Sie daran, ich sagte, Sie in der Regel Verzeichnisse sein wollen „ausführbar“, so dass Sie die Inhalte sehen können.
os.chmod('mydir',0o777) # read/write by everyone
os.chmod('mydir',0o755) # read/write by me, readable for everone else
Hinweis: Die Syntax von 0o777
ist für Python 2.6 und 3+. ansonsten für die 2-Serie ist es 0777
. 2.6 akzeptiert entweder Syntax so diejenige, die Sie auf wählen, wird davon abhängen, ob Sie vorwärts oder rückwärts kompatibel sein.
Andere Tipps
Sie haben wahrscheinlich eine funky umask bekommen. Versuchen Sie os.umask(0002)
vor Ihrem Verzeichnis zu machen.
Das Python-Handbuch sagt:
os.mkdir(path[, mode])
Erstellen Sie ein Verzeichnis namens path mit dem numerischen Modus mode.Der Standard-Modus ist 0777 (Oktalzahl).Auf einigen Systemen Modus ignoriert.Wo es verwendet wird, wird die aktuelle umask-Wert ist zunächst ausgeblendet.Verfügbarkeit:Unix, Windows.
Haben Sie eine Modus - welcher Modus haben, den Sie angeben.Haben Sie betrachten die Angabe eines Modus explizit?Und was ist das Programm umask-Wert"
Da Ihr auf Windows, könnte dies ein crapshoot sein. Stellen Sie sicher, dass es keine verrückten spezielle Berechtigungen für das übergeordnete Verzeichnis sind oder mit den Richtlinieneinstellungen, die die Berechtigungen alle Verzeichnisse erstellt von Ihrem Konto definiert erhalten. Ich bezweifle, dass dies ein Python-Problem ist, wie ich nicht in der Lage, das Problem unter Windows mit einem relativ Vanille Vista installiert neu zu erstellen.