我的python脚本:
#!/usr/bin/env python
import paramiko as ssh
import logging
client = ssh.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(ssh.AutoAddPolicy())
client.connect(TCP_IP, username="root", password=" ")
chan = client.get_transport().open_session()
chan.get_pty()
cmd = "mycommand"
chan.exec_command(cmd)
stdout = chan.recv(BUFFER_SIZE)
print stdout, len(stdout)
所以现在当我运行该脚本时,我得到了不同的输出。 原始输出长度为2058个字符。
但是当我像./aqu.py那样运行scirpt时,我只输出了63个字符,当我需要添加大量的recv来获取整个数据时。
当我在python解释器中运行这些指令时(输入python命令然后逐个输入命令)。我在一次recv中得到了完整的输出。
可能是错的?
答案 0 :(得分:1)
如果您的数据未完全缓冲,则可能会出现此行为。您可以使用chan.recv_ready()
来测试它。 recv_ready()
方法的文档为here
编辑: 你可以这样做:
done = False
while not done:
result = chan.recv(MAX_BUFF_SIZE)
# DO something with the result
done = len(result) == 0