我的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个字符。
但是当我运行scirpt like./aq.py时,我只得到63个字符的输出,而当我需要添加大量recv来获得整个数据时。
当我在python解释器中运行这些指令时(输入python命令,然后逐个输入命令)。我在一台录像机上得到全部的输出。
怎么了?
最佳答案
如果您的数据没有完全缓冲,则可以有这种行为。您可以使用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