channel.recv()在我的python脚本和python交互式shell中表现不同

时间:2017-06-19 06:30:06

标签: python linux shell paramiko channel

我的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中得到了完整的输出。

可能是错的?

1 个答案:

答案 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