【问题标题】:paramiko print exec_command result immediatelyparamiko 立即打印 exec_command 结果
【发布时间】:2015-06-25 04:58:43
【问题描述】:

我知道exec_command 返回 3 个流,但我无法打印输出,因为它应该到达这些流。

client = SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('ls -l; sleep 10; ls -l')
for line in stdout.readlines():
  print line
for line in stderr.readlines():
  print line

这似乎仅在整个命令完成后才在末尾输出新行。我想接收远程命令生成的字符。这可能吗?

【问题讨论】:

标签: python ssh stream paramiko


【解决方案1】:

要读取终端上的输出,我知道的方法是将 readbinaries 和 writebinaries 从 ssh 会话直接流式传输到终端

import paramiko
import os
import sys

host_address = ''
USER = ''
PASSWORD = ''

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host_address, user=USER, password=PASSWORD)

#Time to invoke the shell from paramiko support
client_shell = client.INVOKE_SHELL()
standard_input = client_shell.makefile('wb')
standard_output = client_shell.makefile('rb')

standard_input.write('''
ls -l
sleep 10
ls -l
''')
print standard_output.read()

#Close all the streams and ssh connection in the end to flush the session

standard_input.close()
standard_output.close()
client.close()

【讨论】: