如何从paramiko的标准输出中去除无效字符

3 投票
1 回答
4600 浏览
提问于 2025-04-18 04:13

我正在使用以下脚本在一个命令行中运行一些命令。基本情况是,我有一个服务器应用程序,可以通过ssh命令远程连接到它。我正在用paramiko来模拟这个过程,但问题是,当我运行以下脚本时 -

import sys
#sys.stderr = open('/dev/null')       # Silence silly warnings from paramiko
import paramiko as pm
from paramiko import AutoAddPolicy
sys.stderr = sys.__stderr__
import os

class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return

HOST = 'localhost'
USER = 'admin'
PASSWORD = 'admin'

client = pm.SSHClient()
#client.load_system_host_keys()
#client.load_host_keys(str(pm.AutoAddPolicy()))
client.set_missing_host_key_policy(pm.AutoAddPolicy())
client.connect(HOST, username=USER, password=PASSWORD, port=2222)

channel = client.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('rb')

stdin.write('''
cd /Realms
exit
''')

for line in stdout:    
    print line.strip('\n')

stdout.close()
stdin.close()
client.close()

执行这个脚本时,出现了很多奇怪的字符,如下所示 -

←[39m←[1madmin←[0m@pjajoo-t420:/>
←[39m←[1madmin←[0m@pjajoo-t420:/> cd /Realms
←[39m←[1madmin←[0m@pjajoo-t420:/Realms> exit

有没有人能帮我去掉这些奇怪的字符,这样我在调试和验证答案时会更方便?

注意:我使用的是Windows 7。

1 个回答

2

答案可以在这里找到 - 如何在Python中去除字符串中的ANSI转义序列

我使用了以下代码,效果很好 -

import re

for line in stdout:
    print (re.compile(r'\x1b[^m]*m')).sub('', line)

它去掉了所有不好的字符。

撰写回答