2011-11-15 7 views
13

下記のように、結果を保存することは可能ですか?原因、2番目と3番目のstdout.read()結果に到達できませんでした。Python Paramikoでコマンドを実行した後、どうすれば結果を保存できますか?

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

あなたは(それはボンネットの下にコマンドを実行するためにparamikoを使用しています)を使用するFabricは単純かもしれません。

+0

このジェネリックAPIを試すことができます。しかし、今それは動作します。ハァッ?とにかくありがとう – 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 
関連する問題