2013-01-18 29 views
5

Mam dwa serwery A i B. Mam zamiar wysłać, powiedzmy plik obrazu, z serwera A na inny serwer B. Ale zanim serwer A może wysłać plik powyżej Chciałbym sprawdzić, czy podobny plik istnieje na serwerze B. Próbuję użyć os.path.exists() i to nie działa.Sprawdzanie istnienia pliku na zdalnym serwerze SSH przy użyciu Pythona

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

Wynik powrócić fałszywe nawet Włożyłem dokładną plik na serwerze B. Nie jestem pewien, czy jest to mój błąd składni czy istnieje lepsze rozwiązanie tego problemu. Dziękujemy

+0

Co masz na myśli przez "serwer"? Czy to serwer ssh? Jestem pewien, że moduł 'os.path' nie rozumie żadnych protokołów sieciowych. Oczywiście, jeśli ścieżka sieciowa jest zamontowana gdzieś w systemie plików, możesz uzyskać do niej dostęp za pośrednictwem jej ścieżki. – DaveP

+0

tak, serwer ssh –

Odpowiedz

16

Funkcje os.path działają tylko w przypadku plików na tym samym komputerze. Działają na ścieżkach, a [email protected]:b.jpeg nie jest ścieżką.

Aby to wykonać, trzeba zdalnie wykonać skrypt. Coś jak to będzie działać, zwykle:

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') 

Więc można uzyskać, jeśli plik istnieje na innym serwerze z:

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

Należy pamiętać, że będzie to prawdopodobnie niezwykle powolny, może nawet więcej niż 100 ms.

+0

dziękuję. działa świetnie! –

+3

'return subprocess.call (['ssh', host, 'test -e' + pipes.quote (ścieżka)]) == 0' – jfs

Powiązane problemy