我有一个代码,我在远程Linux机器上执行命令并使用Paramiko读取输出.代码def看起来像这样:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IPAddress, username=user['username'], password=user['password'])
chan = self.ssh.get_transport().open_session()
chan.settimeout(10800)
try:
# Execute thecommand
chan.exec_command(cmd)
contents = StringIO.StringIO()
data = chan.recv(1024)
# Capturing data from chan buffer.
while data:
contents.write(data)
data = chan.recv(1024)
except socket.timeout:
raise socket.timeout
output = contents.getvalue()
return output,chan.recv_stderr(600),chan.recv_exit_status()
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于小输出,但它适用于较大的输出.
这里有缓冲相关的问题吗?
我正在使用Paramiko发布一些命令并收集结果以供进一步分析.每隔一段时间,第一个命令的结果会在时间上完全返回,最后会在第二个命令的输出中结束.
我正在尝试使用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, pause, cmd1)
resp2 = issue_command(chan, pause, cmd2)
Run Code Online (Sandbox Code Playgroud)
这些命令的输出相对较小(几句话).增加暂停可能会解决问题,但不是理想的解决方案.
任何建议或建议将不胜感激.