Avrete probabilmente bisogno di mostrarci il codice che costituisce:
[do some other code here that creates a file]
Il codice si dispone funziona bene sul mio sistema:
import os
oldmask = os.umask (022)
fh1 = os.open ("qq1.junk", os.O_CREAT, 0777)
fh2 = os.open ("qq2.junk", os.O_CREAT, 0022)
os.umask (oldmask)
os.close (fh1)
os.close (fh2)
file che producono come segue:
-rwxr-xr-x 1 pax pax 0 Apr 24 11:11 qq1.junk
---------- 1 pax pax 0 Apr 24 11:11 qq2.junk
Si noti inoltre il ripristino del vecchio valore umask
che riduce al minimo l'impatto di cambiarlo all'operazione locale.
Come puoi vedere dai risultati sopra riportati, devi anche essere consapevole che il valore umask
viene "sottratto" dalla modalità che stai utilizzando per creare il file e non sappiamo quale sia quella modalità nel tuo caso particolare.
Questo è evidente anche nella vostra bash
campione in quanto un valore di umask
022
durante la creazione di un file di modalità 777
porterebbe a r-xr-xr-x
, non rw-r--r--
come lo avete.
In base alle vostre osservazioni qui sotto in cui si indica che si sta utilizzando open
piuttosto che os.open
, una rapida occhiata della sorgente Python sembra indicare che questo si traduce in un C fopen
chiamata che utilizza 0666
come modalità iniziale. Questo è supportato dal codice leggermente modificato:
import os
oldmask = os.umask (022)
fh3 = open ("qq3.junk", "w")
os.umask (0)
fh4 = open ("qq4.junk", "w")
os.umask (oldmask)
fh3.close()
fh4.close()
che ci dà:
-rw-r--r-- 1 pax pax 0 Apr 24 11:44 qq3.junk
-rw-rw-rw- 1 pax pax 0 Apr 24 11:44 qq4.junk
quindi non sono del tutto certo il motivo per cui stai ricevendo 0000
autorizzazioni in vostro caso.
Vale la pena vedere quali sono i risultati quando si esegue quel programma sopra nel proprio ambiente. Se è lo stesso che ho allora il problema potrebbe risiedere altrove.
E 'possibile il file esiste già ? In questo caso dovrai usare chmod –
@gnibbler: No, è stato cancellato in precedenza, ma questa è una buona idea. – narnie
@Ignacio Vazquez-Abrams: prova prima a impostare umask 0027 nella shell, poi esegui lo script o invoca il tuo interprete. – narnie