2012-09-26 5 views
6

Je construis un serveur de fichiers de base et mon programme ne trouve pas de fichiers.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) 

Elles renvoient toujours faux, même si le « monfichier » et « chemin » sont corrects [le fichier est dans le même répertoire que le programme serveur].

IDLE fonctionne correctement, mais sans passer par les fonctions.

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

Qu'est-ce que j'ai manqué?

[EDIT:] Sortie:

Serving file: foo.txt 

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

File exists?: False 
+1

pourriez-vous nous donner la pleine sortie de ces déclarations d'impression? – BostonJohn

+0

Qu'est-ce que * exactement * est 'myfile'? '/ user/server/foo.txt'? –

+1

1. Pourquoi écrivez-vous un serveur de fichiers basique? Qu'en est-il de ? 2. Est-ce que myfile est passé en tant que chemin absolu? 3. Essayez 'import pdb; pdb.set_trace() 'dans la fonction et examine la portée locale. – sapht

Répondre

11

Je suis presque sûr à 100% que vous n'êtes pas en train d'assainir votre entrée avant de vérifier si le chemin existe. Voici quelque chose que je courais dans mon interprète:

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

Essayez de décapage des espaces sur path avant de vérifier si elle existe.

2

Cela peut ne pas répondre à votre question directement, mais vous pouvez aller avec le « try/except » méthode: Quelle que soit la fonction utilise le fichier doit retourner une exception si la le fichier n'existe pas (surtout s'il s'agit d'une fonction intégrée), et vous pouvez agir en conséquence. Ensuite, vous n'avez pas besoin de vérifier si le fichier existe ou non. Dangereux? Peut-être, mais cela dépend de ce que vous essayez réellement de faire.

1

Si vous lisez la documentation Python de os.path.exists(), il dit qu'il ya des cas spécifiques dans lesquels un fichier ou un dossier existe, mais os.path.exists() fausses déclarations:

Retour Vrai si le chemin fait référence à un chemin existant ou ouvert fichier descripteur. Renvoie False pour les liens symboliques brisés. Sur certaines plates-formes , cette fonction peut renvoyer False si l'autorisation n'est pas accordée pour exécuter os.stat() sur le fichier demandé, même si le chemin existe physiquement.

+0

c'était un problème d'espace ... – schroeder