2011-11-15 9 views
13

Come vedi qui sotto, è possibile salvare il risultato? Causa, al secondo e al terzo stdout.read() non sono riuscito a raggiungere il risultato.Dopo aver eseguito un comando da Python Paramiko come posso salvare il risultato?

import paramiko 
import os 
dssh = paramiko.SSHClient() 
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
dssh.connect('192.168.1.250', username='root', password='pass') 
import os 
stdin, stdout, stderr = dssh.exec_command('ifconfig') 
print stdout.read() 
print ('Sleeping 2 seconds!') 
os.system('sleep 2') 
stdin, stdout, stderr = dssh.exec_command('ls -l') 
print stdout.read() 
print stdout.read() 
print stdout.read() 
dssh.close() 

risposta

17

Immaginate che stdout sia un file ordinario. Cosa ti aspetti di ottenere se chiami file.read() la seconda volta? - nulla (stringa vuota) a meno che il file non sia stato modificato all'esterno.

Per salvare la stringa:

output = stdout.read() 

Si potrebbe trovare Fabric più semplice da usare (usa paramiko per eseguire comandi sotto il cofano).

+0

ho provato prima e non lavoravo. Ma ora funziona. Eh? Grazie comunque – nightrider84

6

si può provare questa API Generic

def ssh_ctrl(ip, user, password,cmd): 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    try: 
     ssh.connect(hostname=ip, username=user, password=password, timeout=tout, compress = True,look_for_keys=False, allow_agent=False) 
    except (socket.error,paramiko.AuthenticationException,paramiko.SSHException) as message: 
     print "ERROR: SSH connection to "+ip+" failed: " +str(message) 
     sys.exit(1) 

    stdin, stdout, ssh_stderr = ssh.exec_command(cmd) 
    out = stdout.read() 
    stdin.flush() 
    ssh.close() 
    return out 
Problemi correlati