Python, paramiko, invoke_shell与乱码问题

3 投票
1 回答
9915 浏览
提问于 2025-04-18 10:22

当我运行下面的Python代码时:

import workflow
import console
import paramiko
import time

strComputer = 'server.com'
strUser = 'user'
strPwd = 'passwd'

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=strComputer, username=strUser, password=strPwd)

channel = client.invoke_shell()
channel.send('ls\n')
time.sleep(3)
output=channel.recv(2024)
print(output)

#Close the connection
client.close()
print('Connection closed.')

我得到了想要的输出,但里面夹杂了一些难看的字符:

Last login: Thu Jun 19 23:37:55 2014 from 192.168.0.10

ls
user@server:~$ ls
[0m[01;34mbin[0m                                         Rplots1.pdf
[01;32mbtsync[0m                                      Rplots.pdf
btsync.conf~                                [01;31mrstudio-server-0.95.265-amd64.deb[0m
[01;31mbtsync_glibc23_x64.tar[0m                      screen.vba
[01;34mbudget[0m                                      [01;34mshiny[0m
[01;3
Connection closed.

有没有人能告诉我这是怎么回事,以及如何才能得到更好看的输出呢?谢谢!

1 个回答

7

这些是终端颜色代码,用于让 ls 命令高亮显示目录、可执行文件等。你可以直接调用 /bin/ls(或者在某些系统上使用 ls --color=never)来避免使用别名等,从而获得没有颜色的输出。

这些颜色是通过一些看起来很复杂的代码来定义的,比如 [0m[01;34m。下面是启用 ls 颜色时终端的样子:

在这里输入图片描述

撰写回答