22

基本的なファイル サーバーを構築していますが、プログラムがファイルを見つけることができません。

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)

'myfile' と 'path' が正しい [ファイルがサーバー プログラムと同じディレクトリにある] 場合でも、これらは常に False を返します。

IDLE は正常に動作しますが、関数に渡されません。

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

私は何を逃したのですか?

[編集:] 出力:

Serving file: foo.txt

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

File exists?: False
4

10 に答える 10

23

パスが存在するかどうかを確認する前に、入力をサニタイズしていないことはほぼ 100% 確信しています。インタープリターで実行したものは次のとおりです。

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

path空白が存在するかどうかを確認する前に、空白を取り除いてみてください。

于 2012-09-26T20:30:42.930 に答える
2

これはあなたの質問に直接答えないかもしれませんが、「try/except」メソッドを使用できます: ファイルが存在しない場合 (特に組み込み関数の場合)、ファイルを使用する関数は例外を返す必要があります。それに応じて行動できます。その後、ファイルが存在するかどうかを自分で確認する必要はありません。危険?おそらく、それはあなたが実際に何をしようとしているかによって異なります。

于 2012-09-26T20:23:45.870 に答える