Python mkdir mi dà autorizzazioni sbagliate
-
06-07-2019 - |
Domanda
Sto cercando di creare una cartella e creare un file al suo interno.
Ogni volta che creo quella cartella (tramite Python), crea una cartella che non mi dà affatto autorizzazioni e modalità di sola lettura.
Quando provo a creare il file ottengo un IOError.
Error: <type 'exceptions.IOError'>
Ho provato a creare (e cercare) una descrizione di tutte le altre modalità (oltre a 0770).
Qualcuno può darmi luce? Quali sono gli altri codici modalità?
Soluzione
Dopo aver creato la cartella è possibile impostare le autorizzazioni con os.chmod
La mod è scritta in base 8, se la converti in binaria sarebbe
000 111 111 000
rwx rwx rwx
Il primo rwx
è per il proprietario, il secondo per il gruppo e il terzo per il mondo
r = lettura, w = scrivere, x = eseguire
Le autorizzazioni che vedi più spesso sono
7 leggi / scrivi / esegui - devi eseguire per le directory per vedere i contenuti
6 leggi / scrivi
4 di sola lettura
Quando usi os.chmod
ha molto senso usare la notazione ottale
così
os.chmod('myfile',0o666) # read/write by everyone
os.chmod('myfile',0o644) # read/write by me, readable for everone else
Ricorda che ho detto che di solito vuoi che le directory siano " eseguibili " così puoi vedere i contenuti.
os.chmod('mydir',0o777) # read/write by everyone
os.chmod('mydir',0o755) # read/write by me, readable for everone else
Nota: la sintassi di 0o777
è per Python 2.6 e 3+. altrimenti per la serie 2 è 0777
. 2.6 accetta la sintassi, quindi quella scelta dipenderà dal fatto che si desideri essere compatibile con le versioni precedenti o precedenti.
Altri suggerimenti
Probabilmente hai una umask funky. Prova os.umask (0002)
prima di creare la tua directory.
Il manuale di Python dice:
os.mkdir(path[, mode])
Crea una directory denominata percorso con modalità modalità numerica. La modalità predefinita è 0777 (ottale). Su alcuni sistemi, la modalità viene ignorata. Dove viene utilizzato, il valore umask corrente viene prima mascherato. Disponibilità: Unix, Windows.
Hai specificato una modalità - quale modalità hai specificato. Hai considerato di specificare esplicitamente una modalità? E qual è il valore umask del programma impostato su "
Dato che sei su Windows, questo potrebbe essere un crapshoot. Assicurati che non ci siano autorizzazioni speciali stravaganti sulla directory principale o con le impostazioni dei criteri che definiscono le autorizzazioni ottenute da qualsiasi directory creata dal tuo account. Dubito che questo sia un problema di Python in quanto non sono stato in grado di ricreare il problema su Windows con un'installazione Vista relativamente vanilla.