2012-09-26 36 views
6

Estoy construyendo un servidor de archivos básico y mi programa no puede encontrar archivos.Python path.exists() return False

def sendfile(sock, myfile): 
    print 'Serving file:', myfile 
    print 'File exists?:', os.path.exists(myfile) 

    path = os.path.normpath(os.path.join(os.getcwd(), myfile)) 
    print 'Serving file:', path 
    print 'File exists?:', os.path.exists(path) 

Estos siempre devuelven false aunque la 'miarchivo' y 'camino' son correctas [el archivo está en el mismo directorio que el programa servidor].

IDLE funciona bien, pero sin pasar a las funciones.

>>> print os.path.exists("/user/server/foo.txt") 
True 

¿Qué me he perdido?

[EDIT:] Salida:

Serving file: foo.txt 

File exists?: False 
Serving file: /user/server/foo.txt 

File exists?: False 
+1

¿podría darnos el resultado completo de esas declaraciones impresas? – BostonJohn

+0

¿Qué * exactamente * es 'miarchivo'? '/ user/server/foo.txt'? –

+1

1. ¿Por qué estás escribiendo un servidor de archivos básico? ¿Qué pasa con ? 2. ¿Mi archivo se pasa como ruta absoluta? 3. Pruebe 'import pdb; pdb.set_trace() 'dentro de la función y examine el alcance local. – sapht

Respuesta

11

Estoy casi 100% seguro de que no está desinfectando su entrada antes de comprobar si existe la ruta. Aquí hay algo que me encontré en mi intérprete:

>>> from os.path import exists 
>>> exists('dog.png') 
True 
>>> exists('dog.png\n') 
False 

intente reducirlo espacios en blanco en path antes de comprobar si existe.

2

Esto no puede responder a su pregunta directamente, pero se puede ir con el "try/excepto" método: Sea cual sea la función utiliza el archivo debe devolver una excepción si el el archivo no existe (especialmente si se trata de una función incorporada), y puede actuar en consecuencia. Entonces no necesita verificar si el archivo existe o no. ¿Peligroso? Tal vez, pero eso depende de lo que realmente estás tratando de hacer.

1

Si usted lee la documentación de Python de os.path.exists(), se dice que hay casos específicos en los que existe un archivo o carpeta, pero os.path.exists() retornos falsos:

devueltos TRUE si la ruta se refiere a un trazado existente o un abierto archivo descriptor. Devuelve False para enlaces simbólicos rotos. En algunas plataformas , esta función puede devolver False si no se concede el permiso para ejecutar os.stat() en el archivo solicitado, incluso si la ruta existe físicamente.

+0

era un problema de espacio en blanco ... – schroeder

Cuestiones relacionadas