Paramiko, exec_command 连续获取输出流

Gon*_*n3s 6 python paramiko python-3.x

我干了一个 Python 脚本。我为给定的 IP 创建了一个 Python 脚本,它将通过 Paramiko 连接到服务器以执行另一个 Python 脚本。

这是一些代码:

self._client = paramiko.SSHClient()
self._client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self._client.connect(self._ip, username=self._server['username'], password=self._server['password'])
channel = self._client.get_transport().open_session()
channel.exec_command('python3 /tmp/scrap.py /tmp/' + self._ip + '.txt 0 1')
Run Code Online (Sandbox Code Playgroud)

脚本“scrap.py”每 X 秒在远程机器的控制台中返回一行,但是我无法在上面脚本中的这些行中恢复(在 exec_command (. ..) 的退出时)。

这是可能的,如果是,你知道怎么做吗?

先感谢您。

Luk*_*ger 4

这应该可以解决问题:

stdin, stdout, stderr = channel.exec_command("python myScript.py")
stdin.close()
for line in iter(lambda: stdout.readline(2048), ""):
    print(line, end="")
Run Code Online (Sandbox Code Playgroud)

正如 read([size]) 文档中所指定的,如果您不指定大小,它将读取直到 EOF,这使得脚本在从 read() 返回并打印任何输出之前等待命令结束。