2013-03-25 4 views
71

Recentemente sto usando il modulo Python os, quando ho provato a cambiare il permesso di un file, non ho ottenuto il risultato previsto. Per esempio, ho intenzione di cambiare il permesso di rw-rw-r--,Modulo Python os.chmod (file, 664) non modifica l'autorizzazione per rw-rw-r-- ma -w - wx ----

os.chmod("/tmp/test_file", 664) 

Il permesso di proprietà è in realtà -w - WX --- (230)

--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file 

Tuttavia, se cambio 664 a 0664 nel codice, il risultato è proprio quello di cui ho bisogno, ad es

os.chmod("/tmp/test_file", 0664) 

Il risultato è:

-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file 

Qualcuno potrebbe aiutare a spiegare perché lo fa 0 iniziale è così importante per ottenere il risultato corretto?

+20

ottale. Ottale. Ottale. –

+0

Flag for Unix .. –

+2

Ho aperto un problema per la documentazione di python all'indirizzo http://bugs.python.org/issue25377 perché dovrebbe essere chiaro dai documenti. –

risposta

73

Trovato questo su un different forum

Se vi state chiedendo perché che lo zero è importante, è perché autorizzazioni siano impostate come un intero ottale, e Python automagicamente tratta qualsiasi intero da uno zero come ottale. Così os.chmod ("file", 484) (in decimale) darebbe lo stesso risultato.

Quello che state facendo sta passando 664 che a ottale è 1230

Nel tuo caso si avrebbe bisogno

os.chmod("/tmp/test_file", 436) 

[Update] Nota, per Python 3 avete prefisso con 0o (zero oh). E.G, 0o666

+0

Grazie, ma sono ancora confuso che, 484 in decimale significa 744 in ottale, il che ha senso nel thread che hai citato nel forum.Tuttavia, se fornisco 644 in decimale, va a 1204 in ottale. In che modo 1204 si riferisce a 230 in ottale? – AplusG

+0

Questo è stato raccolto testualmente dal post. Ho aggiunto quello che ti serve (436) nell'ultima parte della risposta – RedBaron

+0

oh..sorry ... il mio errore ... erroneamente prendere 644 per 664 ... – AplusG

6

precedendo "0" significa che è costante ottale, non decimale. e hai bisogno di un ottale per cambiare la modalità file.

autorizzazioni sono una maschera di bit, per esempio, rwxrwx --- è 111111000 in binario, ed è molto facile da bit del gruppo 3 per convertire al ottale, che calcolare la rappresentazione decimale.

0644 (ottale) è 0.110.100.100 in binario (ho aggiunto punti per la leggibilità) o, come è possibile calcolare, 420 in decimale.

76

Così, per le persone che vogliono symantics simili a:

$ chmod 755 somefile 

In python2:

$ python -c "import os; os.chmod('somefile', 0755)" 

Ma in python3:

$ python3 -c "import os; os.chmod('somefile', 0o755)" 
+6

Il formato python3 funziona anche in python 2.7.9. Non ho controllato le versioni precedenti. –