2012-09-26 11 views
6

Buduję podstawowy serwer plików i mój program nie może znaleźć plików.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) 

Są zawsze return false mimo że „myfile” i „ścieżka” są prawidłowe [plik znajduje się w tym samym katalogu co program serwera].

IDLE działa poprawnie, ale bez przekazywania funkcji.

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

Co przeoczyłem?

[EDIT:] Wyjście:

Serving file: foo.txt 

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

File exists?: False 
+1

Czy możesz podać pełną wydajność tych instrukcji drukowania? – BostonJohn

+0

Co * dokładnie * to 'myfile'? '/ user/server/foo.txt'? –

+1

1. Dlaczego piszesz podstawowy serwer plików? A co z ? 2. Czy moja_firma przeszła absolutną ścieżkę? 3. Spróbuj 'import pdb; pdb.set_trace() 'wewnątrz funkcji i sprawdź zasięg lokalny. – sapht

Odpowiedz

11

Jestem prawie w 100% pewien, że nie próbujesz odkażać danych wejściowych przed sprawdzeniem, czy ścieżka istnieje. Oto coś wpadłem w moim tłumacza:

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

Spróbuj usuwanie białych znaków na path zanim sprawdzić, czy istnieje.

2

To nie może odpowiedzieć na to pytanie bezpośrednio, ale można przejść z „spróbuj/z wyjątkiem” metody: Cokolwiek funkcja wykorzystuje plik powinien zwrócić wyjątek, jeśli plik nie istnieje (szczególnie jeśli jest to wbudowana funkcja) i można odpowiednio działać. Wtedy nie musisz sprawdzać, czy plik istnieje sam. Niebezpieczny? Być może, ale to zależy od tego, co faktycznie próbujesz zrobić.

1

Jeśli czytasz dokumentacji Pythona z os.path.exists(), to mówi, że istnieją szczególne przypadki, w których plik lub folder istnieje, ale os.path.exists() zwróci FALSE:

return true jeśli ścieżka odnosi się do istniejącej ścieżki lub przerwy plik deskryptor. Zwraca Fałsz w przypadku zepsutych dowiązań symbolicznych. Na niektórych platformach funkcja ta może zwracać wartość False, jeśli uprawnienia nie zostały przyznane w celu wykonania os.stat() na żądanym pliku, nawet jeśli fizycznie istnieje ścieżka .

+0

to był problem białych znaków ... – schroeder

Powiązane problemy