2013-01-18 13 views
5

私は2台のサーバーAとBを持っています。私は、サーバーAから別のサーバーBに画像ファイルを送ってきたとします。私はos.path.exists()を使用しようとすると、それは動作しません。Pythonを使用してリモートSSHサーバー上にファイルの存在を確認する

print os.path.exists('[email protected]:b.jpeg') 

結果でも、私はそれが私の構文エラーであるか、この問題へのよりよい解決策があるかどうかわからないんだけど、サーバB上の正確なファイルを入れている偽を返します。ありがとう

+0

「サーバー」とはどういう意味ですか?それはsshサーバーですか? 'os.path'モジュールがネットワークプロトコルを理解していないことは確かです。もちろん、ネットワークパスがファイルシステムのどこかにマウントされていれば、そのパス経由でアクセスすることができます。 – DaveP

+0

はいそれはsshサーバ –

答えて

16

os.path関数は、同じコンピュータ上のファイルでのみ機能します。それらはのパスで動作し、[email protected]:b.jpegはパスではありません。

これを実行するには、スクリプトをリモートで実行する必要があります。このような何か通常、動作します:

def exists_remote(host, path): 
    """Test if a file exists at path on a host accessible with SSH.""" 
    status = subprocess.call(
     ['ssh', host, 'test -f {}'.format(pipes.quote(path))]) 
    if status == 0: 
     return True 
    if status == 1: 
     return False 
    raise Exception('SSH failed') 

ファイルを持つ別のサーバー上に存在するのであれば、あなたが得ることができるが:

if exists_remote('[email protected]', 'b.jpeg'): 
    # it exists... 

これは、おそらくよりもおそらくもっと、信じられないほど遅くなることに注意してください100ms。

+0

ありがとうございます。それは素晴らしい! –

+3

'return subprocess.call(['ssh'、host、 'test -e' + pipes.quote(path)])== 0' – jfs

関連する問題