2009-10-26 25 views
9

Sto provando a creare una cartella e creare un file al suo interno.Python mkdir mi dà permessi errati

Ogni volta che creo quella cartella (tramite Python), crea una cartella che non mi dà alcuna autorizzazione e in sola lettura.

Quando provo a creare il file ottengo un IOError.

Error: <type 'exceptions.IOError'> 

Ho cercato di creare (e ricerca) per una descrizione di tutte le altre modalità (oltre 0770).

Qualcuno può darmi luce? Quali sono gli altri codici di modalità?

+0

Stai cercando di creare il file in un percorso a cui non hai accesso? – jldupont

+0

Qual è la tua umask? – ephemient

risposta

18

Dopo aver creato la cartella è possibile impostare le autorizzazioni con os.chmod

Il mod è scritto in base 8, se si converte al binario sarebbe

000 111 111 000 
    rwx rwx rwx 

Il primo rwx è immobiliare , il secondo è per il gruppo e il terzo è per il mondo

r = lettura, w = scrivere, x = eseguire

le permis SION che si vede il più delle volte sono
7 di lettura/scrittura/esecuzione - è necessario eseguire per le directory per visualizzare il contenuto
6 di lettura/scrittura
4 in sola lettura

Quando si utilizza os.chmod ha più 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 

Ricordate che ho detto di solito si desidera directory di essere "eseguibile" in modo da poter vedere il contenuto.

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 in modo che quella scelta dipenda dal fatto che si desideri essere compatibili in avanti o all'indietro.

+3

"windows" -tag .. –

+0

Suppongo che intendesse os.chmod – RedGlyph

+0

Dare al ragazzo anche un esempio, può essere confuso con * nix chmod. –

5

Probabilmente hai un umask funky. Prova os.umask(0002) prima di creare la tua directory.

+0

Un umask di 777 garantisce che tutti i bit di autorizzazione siano zero. Potresti aver inteso 000; potrebbe essere più sensato usare 002 o 022. –

+0

/me è un idiota. Grazie. –

3

manuale Il Python dice:

os.mkdir(path[, mode]) 

Creare una directory denominata percorso con la modalità modalità numerica. La modalità predefinita è 0777 (ottale). In alcuni sistemi, la modalità viene ignorata. Dove viene utilizzato, il valore corrente di umask viene prima mascherato. Disponibilità: Unix, Windows.

Avete specificato una modalità, quale modalità avete specificato. Hai considerato di specificare una modalità in modo esplicito? E qual è il valore di umask del programma impostato su "

1

Dal momento che su Windows, questo potrebbe essere un crapshoot.Assicurarsi che non ci sono permessi speciali stravaganti sulla directory superiore o con le impostazioni dei criteri che definisce le autorizzazioni qualsiasi directory creato dal tuo account.Dubito che si tratti di un problema python in quanto non sono stato in grado di ricreare il problema su Windows con un'installazione di Vista relativamente vanilla.

Problemi correlati