9

我有两台服务器 A 和 B。我想发送一个图像文件,从服务器 A 到另一台服务器 B。但是在服务器 A 可以发送文件之前,我想检查服务器中是否存在类似的文件B. 我尝试使用 os.path.exists() 但它不起作用。

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

即使我在服务器 B 上放置了一个确切的文件,结果也会返回错误。我不确定是我的语法错误还是有更好的解决方案来解决这个问题。谢谢

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 回答