Usted va a necesitar para mostrarnos el código que constituye:
[do some other code here that creates a file]
El código que tiene funciona bien en mi 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)
archivos que producen de la siguiente manera:
-rwxr-xr-x 1 pax pax 0 Apr 24 11:11 qq1.junk
---------- 1 pax pax 0 Apr 24 11:11 qq2.junk
También debe tener en cuenta la restauración del antiguo valor umask
que minimiza el impacto de cambiarlo a la operación local.
Como puede ver en los resultados anteriores, también debe tener en cuenta que el valor umask
se "resta" del modo que está utilizando para crear el archivo y no sabemos cuál es ese modo en su caso particular.
Eso es evidente incluso en su muestra bash
desde un valor de umask
022
al crear un archivo de modo 777
resultaría en r-xr-xr-x
, no rw-r--r--
como lo tienes.
Sobre la base de sus comentarios a continuación donde se indique que está utilizando en lugar de open
os.open
, una simple mirada de la fuente de Python parece indicar que esto se traduce en un C fopen
llamada que utiliza 0666
como el modo inicial. Esto es apoyado por el código ligeramente modificado:
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()
que nos da:
-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
así que no estoy del todo seguro de por qué recibe 0000
permisos en su caso.
Valdría la pena ver cuáles son los resultados cuando ejecuta ese programa anterior en su entorno. Si es lo mismo que recibo, entonces el problema puede estar en otro lugar.
¿Es posible que el archivo ya existe ? En su lugar, deberá usar chmod en ese caso –
@gnibbler: No, se eliminó antes, pero eso es una buena idea. – narnie
@Ignacio Vazquez-Abrams: primero intente configurar umask 0027 en el shell, luego ejecute el script o invoque a su intérprete. – narnie