2011-11-15 13 views
13

Aşağıda gördüğünüz gibi, sonucu kaydetmek mümkün mü? Neden, ikinci ve üçüncü stdout.read() sonuca ulaşamadı.Python Paramiko tarafından bir komut çalıştırıldıktan sonra nasıl sonuç kaydedebilirim?

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

cevap

17

stdout'un sıradan bir dosya olduğunu düşünün. file.read()'u ikinci kez aradığınızda ne elde etmeyi bekliyorsunuz? - Dosya değişmedikçe hiçbir şey (boş dizge).

dize kaydetmek için:

output = stdout.read() 

Sen basit Fabric kullanmak bulabilirsiniz (bu başlık altında komutları yürütmek için paramiko kullanır).

+0

deneyebilirsiniz ve ben çalışmıyordu. Ama şimdi çalışıyor. Ha? Yine de teşekkürler – nightrider84

6

Sen Bunu daha önce denedik bu Jenerik 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 
İlgili konular