概述
我正在尝试使用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:如何确保命令之间接收数据所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧