使用 paramiko PTY 运行命令给出错误:write() argument must be str, not bytes

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

我正在使用

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

读取运行命令的多行输出的正确方法是什么?

python python-3.x ssh paramiko pty
1个回答
0
投票

通道标准输出给了你字节,但是 sys.stdout 是一个 TextIO。使用

sys.stdout.buffer.write(...)
代替。

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