如何捕获执行命令的输出(python paramiko)?

时间:2017-08-20 06:51:58

标签: python-2.7 ssh stdout paramiko

我正在执行某些命令,并希望捕获相同的输出。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,username="username",password="pwd")
stdin, stdout, stderr = ssh.exec_command("whoami")
out = stdout.read()
print out           # prints username
print stdout.read() # prints nothing, why is it so ?
                    # Instance #1

stdin, stdout, stderr = ssh.exec_command("kill -9 1111")
out = stdout.read()
print out #prints nothing. expected as it doesn't capture if it's successful
# print out # should print "-bash: kill: (1111) - No such process" , if it doesn't exist 
#--> Instance #2

在实例#1中,为什么要打印stdout.read(),什么都不打印?

在实例#2中,如何捕获此类输出/响应?

2 个答案:

答案 0 :(得分:2)

实例#1

out = stdout.read()
print stdout.read()

第一个stdout.read()已经消耗了所有输出,因此第二个stdout.read()没有返回任何内容。

实例#2

通常错误消息会打印到 stderr ,因此您应该使用stderr.read()来获取错误。

答案 1 :(得分:0)

它可能没有打印任何内容,因为stdout因为执行错误而为空。 尝试打印stderr而不是stdout