相关疑难解决方法(0)

Paramiko频道在阅读大量输出时卡住了

我有一个代码,我在远程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)

上面的代码适用于小输出,但它适用于较大的输出.

这里有缓冲相关的问题吗?

python paramiko

9
推荐指数
2
解决办法
2万
查看次数

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

我正在使用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)

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

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

python paramiko

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

paramiko ×2

python ×2