Paramiko stdout readline()命令挂起[重复]。

问题描述 投票:0回答:1

我正在使用python paramiko库来SSH进入一个FTP服务器。我能够使用命令行访问服务器,并使用sftp命令检索文件列表,但是paramiko似乎做了一些事情,使我无法检索输出。这是我的python代码。

import paramiko
client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect('###########',
        port=##,
        username='####',
        password='####',
        key_filename='#####')

stdin, stdout, stderr = client.exec_command('ls')

这一切都能正常工作 然而下一行

stdout.readline()

只是坐在那里挂着。注意,每 这条 我甚至没有试图检索完整的输出,只是第一行。

我还尝试了

stdin.close()
print(stdout.readlines())

返回一个空字符串。这说明服务器可能在等待输入,但当我使用命令行时,我只需发送ls命令就能得到输出,那么它在等待什么命令呢?

版本。

  • python 3.7.4
  • paramiko 2.7.1
python-3.x ssh ftp paramiko
1个回答
0
投票

你的readline可能在远程主机返回之前就已经执行了。

import paramiko
client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect('###########',
        port=##,
        username='####',
        password='####',
        key_filename='#####')

stdin, stdout, stderr = client.exec_command('ls')        
stdout.channel.recv_exit_status()
print(stdout.readline())

recv_exit_status()会等到远程主机上的exec_command()返回后再执行.

© www.soinside.com 2019 - 2024. All rights reserved.