2011-11-15 12 views
13

जैसा कि आप नीचे देखते हैं, क्या परिणाम को सहेजना संभव है? कारण, दूसरे और तीसरे stdout.read() पर मैं परिणाम तक नहीं पहुंच सका।पायथन परमिको द्वारा एक आदेश निष्पादित करने के बाद मैं परिणाम कैसे बचा सकता हूं?

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

उत्तर

17

कल्पना कीजिए कि stdout एक सामान्य फ़ाइल है। यदि आप दूसरी बार file.read() पर कॉल करते हैं तो आप क्या प्राप्त करने की उम्मीद करते हैं? - कुछ भी नहीं (खाली स्ट्रिंग) जब तक फ़ाइल बाहर नहीं बदल जाती है।

स्ट्रिंग सहेजने के लिए:

output = stdout.read() 

आप Fabric सरल उपयोग करने के लिए मिल सकती है (यह paramiko का उपयोग करता है हुड के नीचे आदेश पर अमल करने के लिए)।

+0

मुझे लगता है कि इससे पहले कि कोशिश की कोशिश कर सकते हैं और मैं काम नहीं कर रहा था। लेकिन अब यह काम करता है। है ना? फिर भी धन्यवाद – nightrider84

6

आप इस जेनेरिक एपीआई

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 
संबंधित मुद्दे

 संबंधित मुद्दे