Python 为什么paramiko ssh可以';t实时输出打印信息

Python 为什么paramiko ssh可以';t实时输出打印信息,python,python-3.x,ssh,Python,Python 3.x,Ssh,我使用python3ssh,现在我可以登录远程设备,执行我的远程C程序,但是程序打印信息不能实时显示在本地pc上。如果我的C程序使用setbuf(stdout,NULL)设置非缓冲,我的电脑可以获取实时信息;我想知道如果C程序没有设置非缓冲,我如何在本地PC上获取远程实时信息 这是我的密码: def get_ssh_log(hostip, login_name, pw, privaete_key, cmd): ssh = paramiko.SSHClient() ssh.set_

我使用python3ssh,现在我可以登录远程设备,执行我的远程C程序,但是程序打印信息不能实时显示在本地pc上。如果我的C程序使用
setbuf(stdout,NULL)设置非缓冲,我的电脑可以获取实时信息;我想知道如果C程序没有设置非缓冲,我如何在本地PC上获取远程实时信息

这是我的密码:

def get_ssh_log(hostip, login_name, pw, privaete_key, cmd):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname='%s' % hostip, port=22, username='%s' % login_name, password='%s' % pw,key_filename='%s' % privaete_key)
    stdin, stdout, stderr = ssh.exec_command("%s" % cmd, bufsize=1)
    for line in iter(stdout.readline, ""):
        print(line)
    ssh.close()

您可以在
expect
包的包装
unbuffer
下运行任何程序。就你而言:

ssh.exec_command("unbuffer %s" % cmd)
当然,这是假设目标机器上安装了
unbuffer


Ref:

您可以在
expect
包的
unbuffer
包装下运行任何程序。就你而言:

ssh.exec_command("unbuffer %s" % cmd)
当然,这是假设目标机器上安装了
unbuffer


Ref:

您知道
%s”%cmd
只是
cmd
对吗?我想@JohnZwinck的评论也适用于此函数中
%
运算符的所有其他用法。@JohnZwinck是的,我知道“%s”%cmd只是cmd;你知道
%s”%cmd
只是
cmd
对吗?我想@JohnZwinck的评论也适用于该函数中
%
运算符的所有其他用法。@JohnZwinck是的,我知道“%s”%cmd只是cmd;远程设备是运行openwrt操作系统的嵌入式设备,在其上安装任何软件包都不方便。如果在本地PC的python3中有其他方法可以实时获取输出。谢谢。@simon:那么您可以自己实现解除缓冲程序,可能是在Python中,并在执行之前使用SFTP将其复制到目标。这类程序的源代码如下:远程设备是运行openwrt操作系统的嵌入式设备,在其上安装任何软件包都不方便。如果在本地PC的python3中有其他方法可以实时获取输出。谢谢。@simon:那么您可以自己实现解除缓冲程序,可能是在Python中,并在执行之前使用SFTP将其复制到目标。此类程序的源代码如下: