您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Paramiko:如何确保命令之间接收数据

5b51 2022/1/14 8:22:12 python 字数 3090 阅读 567 来源 www.jb51.cc/python

我正在使用Paramiko发布一些命令并收集结果以供进一步分析.每隔一段时间,第一个命令的结果会在时间上完全返回,最后会在第二个命令的输出中结束. 我正在尝试使用recv_ready来解释这个问题,但它没有用,所以我认为我做错了什么.这是相关的代码: pause = 1 def issue_command(chan, pause, cmd): # send commands and re

概述

我正在尝试使用recv_ready来解释这个问题,但它没有用,所以我认为我做错了什么.这是相关的代码

pause = 1

def issue_command(chan,pause,cmd):
    # send commands and return results
    chan.send(cmd + '\n')
    while not chan.recv_ready():
        time.sleep(pause)
    data = chan.recv(99999)

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
chan = ssh.connect(host,port=22,username=username,password=password,timeout=3,)

resp1 = issue_command(chan,cmd1)
resp2 = issue_command(chan,cmd2)

这些命令的输出相对较小(几句话).增加暂停可能会解决问题,但不是理想的解决方案.

任何建议或建议将不胜感激.

def issue_command(transport,command):
    chan = transport.open_session()
    chan.exec_command(command)

    buff_size = 1024
    stdout = ""
    stderr = ""

    while not chan.exit_status_ready():
        time.sleep(pause)
        if chan.recv_ready():
            stdout += chan.recv(buff_size)

        if chan.recv_stderr_ready():
            stderr += chan.recv_stderr(buff_size)

    exit_status = chan.recv_exit_status()
    # Need to gobble up any remaining output after program terminates...
    while chan.recv_ready():
        stdout += chan.recv(buff_size)

    while chan.recv_stderr_ready():
        stderr += chan.recv_stderr(buff_size)

    return exit_status,stdout,stderr

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,)
transport = ssh.get_transport()
pause = 1    

resp1 = issue_command(transport,cmd1)
resp2 = issue_command(transport,cmd2)

更好的方法获取一个命令列表并为每个命令生成一个新通道,轮询每个chan的recv_ready,并在输出可用时吸收它们的stdout / stderr.

总结

以上是编程之家为你收集整理的python – Paramiko:如何确保命令之间接收数据全部内容,希望文章能够帮你解决python – Paramiko:如何确保命令之间接收数据所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶