通过 Paramiko 处理远程 SSH CLI 输出中的垃圾值
使用 Python 的 Paramiko 库进行 SSH 连接和从远程计算机的输出检索时CLI 中,用户可能会遇到散布在所需输出中的不需要的垃圾值。这些值通常采用 ANSI 转义码的形式,例如“x1b[2Jx1b[1;1H””,可能会使输出混乱并妨碍其可用性。
了解垃圾值的来源
与垃圾代码的假设相反,这些转义码对于终端环境中正确的输出显示至关重要。它们向终端提供有关如何设置文本格式、移动光标等的说明。但是,如果您不使用交互式终端,这些代码可能会出现问题。
解决方案:交互式执行命令
默认情况下,Paramiko 的 SSHClient.invoke_shell 方法会启动一个交互式终端会话,这会导致包含转义码。要消除此问题,请切换到 exec_command 方法,该方法无需伪终端即可运行命令(除非显式启用):
<code class="python">stdin, stdout, stderr = client.exec_command('ls')</code>
替代解决方案
如果出于某种原因您需要使用“shell”通道,您可以手动创建它,而无需伪终端。此外,您可以使用以下解决方法从字符串输出中删除转义序列:
<code class="python">import re output = re.sub(r'(\x1b\[.*?m)', '', output)</code>
解码输出编码
请注意前面的“u”字符问题中的字符串输出表示 Unicode 编码。这对于处理输出中的非 ASCII 字符是必要的。
以上是如何使用 Paramiko 处理远程 SSH CLI 输出中的垃圾值?的详细内容。更多信息请关注PHP中文网其他相关文章!