2009-10-26 15 views
9

Estoy tratando de crear una carpeta y crear un archivo dentro de ella.Python mkdir que me da permisos erróneos

Cada vez que creo esa carpeta (a través de Python), crea una carpeta que no me da permisos en absoluto y el modo de solo lectura.

Cuando intento crear el archivo, obtengo un IOError.

Error: <type 'exceptions.IOError'> 

He intentado crear (y buscar) una descripción de todos los demás modos (además de 0770).

¿Alguien puede darme luz? ¿Cuáles son los otros códigos de modo?

+0

¿Está tratando de crear el archivo en una ruta a la que no tiene acceso? – jldupont

+0

¿Cuál es tu umask? – ephemient

Respuesta

18

Después de crear la carpeta se pueden establecer los permisos con os.chmod

El mod está escrito en base 8, si se lo convierte a binario sería

000 111 111 000 
    rwx rwx rwx 

La primera rwx es para el propietario , el segundo es para el grupo y la tercera es para el mundo

r = lectura, w = escribir, x = ejecutar

los permis siones que se ve con mayor frecuencia son
7 de lectura/escritura/ejecución - es necesario ejecutar para los directorios para ver el contenido
6 de lectura/escritura
4 de sólo lectura

Cuando se utiliza os.chmod, lo más sensato utilizar la notación octal por lo

os.chmod('myfile',0o666) # read/write by everyone 
os.chmod('myfile',0o644) # read/write by me, readable for everone else 

Recuerda que dije normalmente se quiere directorios sean "ejecutable" para que pueda ver el contenido.

os.chmod('mydir',0o777) # read/write by everyone 
os.chmod('mydir',0o755) # read/write by me, readable for everone else 

Nota: La sintaxis de 0o777 es para Python 2.6 y 3+. de lo contrario, para la serie 2 es 0777. 2.6 acepta cualquiera de las sintaxis, por lo que la que elijas dependerá de si deseas ser compatible hacia delante o hacia atrás.

+3

"windows" -tag .. –

+0

Supongo que se refería a os.chmod – RedGlyph

+0

Dale también un ejemplo al chico, se puede confundir con * nix chmod. –

5

Probablemente tengas un funky umask. Pruebe os.umask(0002) antes de hacer su directorio.

+0

Una umask de 777 aseguraría que todos los bits de permisos sean cero. Podrías haber querido decir 000; podría ser más sensato usar 002 o 022. –

+0

/me es un idiota. Gracias. –

3

manual de Python El dice:

os.mkdir(path[, mode]) 

Crear un directorio llamado camino con el modo de modo numérico. El modo predeterminado es 0777 (octal). En algunos sistemas, el modo se ignora. Donde se usa, el valor actual de umask se enmascara primero. Disponibilidad: Unix, Windows.

Ha especificado un modo, que modo especificó. ¿Consideró especificar un modo explícitamente? ¿Y cuál es el valor de umask del programa establecido en "

1

Dado que estás en Windows, esto podría ser un crapshoot. Asegúrate de que no haya ningún permiso especial extravagante en el directorio principal o con la configuración de la política que define los permisos de los directorios creado por su cuenta get.Dudo que este sea un problema de Python ya que no he podido recrear el problema en Windows con una instalación de Vista relativamente simple.

Cuestiones relacionadas