2013-01-18 19 views
5

Ho due server A e B. Sto supponendo di inviare, diciamo un file immagine, dal server A a un altro server B. Ma prima che il server A potesse inviare il file su Mi piacerebbe controllare se un file simile esiste nel server B. Provo a usare os.path.exists() e non funziona.Controllo dell'esistenza di un file su un server SSH remoto usando Python

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

Il risultato restituisce un falso, anche io ho messo un file esatto sul server B. Non sono sicuro se è il mio errore di sintassi o c'è una soluzione migliore a questo problema. Grazie

+0

Cosa intendi con "un server"? È un server ssh? Sono abbastanza sicuro che il modulo 'os.path' non capisca nessun protocollo di rete. Naturalmente, se il percorso di rete è montato da qualche parte nel tuo file system, puoi accedervi tramite il suo percorso. – DaveP

+0

sì è un server ssh –

risposta

16

Le funzioni os.path funzionano solo sui file sullo stesso computer. Operano sui percorsi e [email protected]:b.jpeg non è un percorso.

Per eseguire ciò, è necessario eseguire in remoto uno script. Qualcosa di simile a questo lavoro, di solito:

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

modo da poter ottenere, se esiste un file su un altro server con:

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

Si noti che questo sarà probabilmente incredibilmente lento, probabilmente anche più di 100 ms.

+0

grazie. funziona alla grande! –

+3

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