9

サーバーAとBの2つのサーバーがあります。サーバーAから別のサーバーBに画像ファイルを送信するとします。ただし、サーバーAがファイルを送信する前に、サーバーに同様のファイルが存在するかどうかを確認したいと思いますB. os.path.exists() を使用しようとしましたが、機能しません。

print os.path.exists('ubuntu@serverB.com:b.jpeg')

サーバー B に正確なファイルを置いたとしても、結果は false を返します。それが私の構文エラーなのか、それともこの問題に対するより良い解決策があるのか​​ わかりません。ありがとうございました

4

1 に答える 1

22

os.path関数は、同じコンピューター上のファイルに対してのみ機能します。これらはパス上で動作し、パスubuntu@serverB.com: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('ubuntu@serverB.com', 'b.jpeg'):
    # it exists...

これはおそらく信じられないほど遅く、おそらく 100 ミリ秒を超えることに注意してください。

于 2013-01-18T04:38:01.940 に答える