我正在使用一个名为“paramiko”的Python SSH库。 使用方法如下:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user_name, password=password)
chan = ssh_pool[host].get_transport().open_session()
chan.exec_command(SOME_COMMAND)
由于我需要在sudo
中执行某些命令,所以在执行exec_command
前需要调用chan.get_pty()
来确保有一个可用的tty。
然后我发现,在调用了get_pty()
之后,从远程服务器返回的标准输出使用\r\n
代替\n
作为换行符。
例如:
>>> chan = ssh.get_transport().open_session()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\n'
在调用get_pty()之后:
>>> chan = ssh.get_transport().open_session()
>>> chan.get_pty()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\r\n'
我进行了一些网络搜索,但没有找到任何与 pty / tty / newline / \r\n 相关的内容。
我担心此更改可能会引起什么问题。
为什么 paramiko 返回 \r\n 而不是 \n 作为换行符?
\n
列表并替换\r
,或者同时替换\r
和\n
:https://dev59.com/PmQn5IYBdhLWcg3wzZtU - jhoepken