我有以下代码
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
privatekeyfile = 'PK_FILE_PATH'
username ="USERNAME"
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
client.connect(hostname= IP, username=username, pkey=mykey)
command = SERVER_COMMAND
stdin, stdout, stderr = client.exec_command(command)
while not stdout.channel.exit_status_ready():
if stdout.channel.recv_ready():
stdoutLines = stdout.readlines()
print stdoutLines
我执行的命令大约需要10秒才能在服务器上运行。它最初返回一些信息(用户配置文件和模块版本),然后运行一些代码来检查一些本地服务器资源的状态。
Paramiko在收到初始标头信息后关闭连接。我需要它等待serverside命令的完整输出返回。我尝试过实施tintin's solution here, with the same result
有什么想法吗?
答案 0 :(得分:1)
Paramiko在收到初始标头信息后正在关闭连接。
我认为这不是真的。尝试运行像
这样的命令command = 'echo first && sleep 60 && echo second'
while not stdout.channel.exit_status_ready():
if stdout.channel.recv_ready():
stdoutLines = stdout.readlines()
print stdoutLines
你会得到两条线(还要注意我在循环中打印线条,所以你可以看到线条)。
一定是你的命令,如:
stderr
上打印最终输出,而不是stdout
。答案 1 :(得分:1)
添加get_pty=True
这将等到命令执行完成。
stdin,stdout,stderr = self.ssh.exec_command(command,get_pty=True)