如何从paramiko的标准输出中删除不良字符

3
我使用以下脚本在shell中运行一些命令。 基本场景是,我有一个服务器应用程序,可以使用ssh命令通过远程shell连接到它。我正在使用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。


4
它们不是“坏”角色,它们是“漂亮”的角色... :) - Kent
好的...如何排除它们? - Piyush Jajoo
你可以尝试查找有关Paramiko的信息,了解如何禁用ANSI转义。我没有Windows进行测试,也没有使用过Paramiko。 - Kent
当你已经使用了 import paramiko as pm 并且所有后续的引用都使用 pm.AutoAddPolicy,为什么还要使用 from paramiko import AutoAddPolicy - twalberg
1个回答

2
答案可以在以下链接找到 - 如何在Python中删除字符串中的ANSI转义序列 我已经使用了以下代码行来实现上述代码,并且它对我有效 -
import re

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

它删除了所有不良字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接