2012-05-13 24 views
35

Recibo IOError: [Errno 13] Permission denied y no sé qué hay de malo en este código.Python - IOError: [Errno 13] Permiso denegado:

estoy tratando de leer un archivo dado una ruta absoluta (es decir, sólo file.asm),

y una ruta relativa (es decir, /.../file.asm), y quiero el programa para escribir el archivo en cualquier camino que se da - si es absoluto, debe escribirlo en el directorio actual; de lo contrario, a la ruta dada.

el código:

#call to main function 
if __name__ == '__main__': 
    assem(sys.argv[1]) 


import sys 

def assem(myFile): 
    from myParser import Parser 
    import code 
    from symbolTable import SymbolTable 

    table=SymbolTable() 

    # max size of each word 
    WORD_SIZE = 16 
    # rom address to save to 
    rom_addrs = 0 
    # variable address to save to 
    var_addrs = 16 

    # new addition 
    if (myFile[-4:] == ".asm"): 
     newFile = myFile[:4]+".hack" 

    output = open(newFile, 'w') <==== ERROR 

da el error:

IOError: [Errno 13] Permission denied: '/Use.hack' 

mi forma de ejecutar el código:

python assembler.py Users/***/Desktop/University/Add.asm 

¿Qué estoy haciendo mal aquí?

+2

lo más probable es que no tenga permisos para escribir en el directorio raíz, y con razón, parece que – Ingo

Respuesta

15

Parece que usted está tratando de reemplazar la extensión con el siguiente código:

if (myFile[-4:] == ".asm"): 
    newFile = myFile[:4]+".hack" 

Sin embargo, parecen tener los índices de matriz mezclados. Pruebe lo siguiente:

if (myFile[-4:] == ".asm"): 
    newFile = myFile[:-4]+".hack" 

Nota el uso de -4 en lugar de sólo 4 en la segunda línea de código. Esto explica por qué su programa está intentando crear /Use.hack, que es el primeros cuatro caracteres de su nombre de archivo (/Use), con .hack anexado.

+0

sí, tienes razón. pero ahora recibo: IOError: [Errno 2] No existe dicho archivo o directorio: 'Users/itzikhanoch/Desktop/University/Add.hack' im usando 'w' ¿por qué debería encontrar algún archivo? se supone que debe escribirlo. – Itzik984

+3

Ahora parece que está pasando 'User/...' en lugar de '/ User/...'. Tenga en cuenta la barra diagonal, eso es importante. Sin la barra diagonal, está intentando abrir un archivo en el * subdirectorio del directorio actual * llamado 'Usuario'. –

9

No tiene permisos suficientes para escribir en el directorio raíz. ¿Ves la barra diagonal en el nombre del archivo?

+0

hay algo que pueda hacer al respecto? Estoy escribiendo esto en una carpeta simple en mi escritorio, nada especial – Itzik984

+2

Simplemente intente eliminar el '/' al inicio. – Ashe

+5

Conozca lo que es una ruta absoluta y relativa: las obtiene incorrectas. Aprende a dónde conducirá un camino como/foo. – Ingo

-1

Por supuesto que puede. Tratar de cambiar esta línea:

output = open(newFile, 'w') 

a:

output = open("./%s" % (newFile), 'w') 

se debe guardar el archivo en el directorio local.

+0

ahora no escribirá nada ... no se puede encontrar el archivo en cualquier lugar – Itzik984

+0

@ Itzik984: Si no obtuvo un error, entonces el archivo se escribió * en algún lugar *. Es probable que en algún lugar sea el directorio de trabajo actual del proceso que escribió el archivo. –

+0

@GregHewgill tienes razón. lo siento. pero aún así, necesito que se escriba en la ruta determinada, no en el directorio de trabajo actual ... – Itzik984

23

Solo cierre el archivo abierto donde va a escribir.

+1

Esta respuesta no tiene sentido para la pregunta ... – duskwuff

4

Esto me sucedió cuando estaba usando 'shutil.copyfile' en lugar de 'shutil.copy'. Los permisos estaban en mal estado.

-2

Para mí, esto era un problema de permisos.

Utilice la aplicación 'Tomar propiedad' en esa carpeta específica. Sin embargo, esto a veces parece funcionar solo temporalmente y no es una solución permanente.

Cuestiones relacionadas