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

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

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

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

pause = 1def 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,user@R_301_6889@=user@R_301_6889@,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,stderrssh = 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:如何确保命令之间接收数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存