2011-11-15 13 views
13

Jak widać poniżej, można zapisać wynik? Bo na drugim i trzecim stdout.read() nie mogłem osiągnąć wyniku.Po wykonaniu polecenia Pythona Paramiko, jak mogę zapisać wynik?

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

Odpowiedz

17

Wyobraź sobie, że stdout jest zwykłym plikiem. Czego oczekujesz, jeśli zadzwonisz pod numer file.read() po raz drugi? - nic (pusty ciąg), chyba że plik zmienił się na zewnątrz.

Aby zapisać ciąg:

output = stdout.read() 

może znaleźć Fabric prostsze w użyciu (używa paramiko wykonywanie poleceń pod maską).

+0

Próbowałem tego wcześniej i nie działa. Ale teraz działa. Huh? Dzięki i tak – nightrider84

6

Można spróbować typowego API

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