如何从 paramiko 的标准输出中删除坏字符 [重复]

Posted

技术标签:

【中文标题】如何从 paramiko 的标准输出中删除坏字符 [重复]【英文标题】:How to remove bad characters from the stdout in paramiko [duplicate] 【发布时间】:2014-06-11 01:36:54 【问题描述】:

我正在使用以下脚本在 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。

【问题讨论】:

它们不是字符,它们是漂亮字符... :) ok...如何排除它们? 您可以尝试查找有关 paramiko 的信息,查看如何禁用 ansi 转义。我没有要测试的窗口,也没有使用 paramiko。 既然你已经完成了import paramiko as pm 并且所有进一步的参考都使用pm.AutoAddPolicy,为什么还要from paramiko import AutoAddPolicy 【参考方案1】:

可以在How can I remove the ANSI escape sequences from a string in python找到答案

我在上面的代码中使用了以下代码行,它对我有用 -

import re

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

它删除了所有坏字符。

【讨论】:

以上是关于如何从 paramiko 的标准输出中删除坏字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c ++ char vector,删除带有数字的单词加上坏单词后的空格

带有 Paramiko 的嵌套 SSH 退出 while 循环

在 Python 中使用 Paramiko 从 top 命令收集输出

如何从顶部文件或标准输出中删除 n 行(即撕掉它的标题)[重复]

从 R 中的字符向量中删除引号

读取在 SSH 服务器上执行的命令的输出,使用 Paramiko 作为字符串,而不是字节