我正在使用
paramiko
通过 SSH 连接到远程机器,其中运行 bash 命令并且需要在发送时逐行读取 stdout 输出。
这就是我目前所拥有的。
get_pty=True
需要设置
import paramiko
import sys
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect('my.host.com', 22, 'root', key_filename="/home/me/.ssh/id_ed25519")
stdin, stdout, stderr = ssh.exec_command("ls", get_pty=True)
while True:
v = stdout.channel.recv(1024)
if not v:
break
sys.stdout.write(v)
sys.stdout.flush()
运行这个给出错误
File "/home/me/test.py", line 13, in <module>
sys.stdout.write(v)
TypeError: write() argument must be str, not bytes
读取运行命令的多行输出的正确方法是什么?
通道标准输出给了你字节,但是 sys.stdout 是一个 TextIO。使用
sys.stdout.buffer.write(...)
代替。