首页 > 解决方案 > Decode() 在提示符周围打印额外的字符

问题描述

我正在编写一个简单的脚本来检查文件的所有权。这一切都按预期工作,但我在输出中得到了一些随机(或不是)字符。

这是脚本:

import pexpect

p=pexpect.spawn('ssh root@%s'% addr)
p.sendline("ls -l /etc/gshadow")
p.expect("root@system:~#")
print("CMD %s:\n" %p.before.decode())

这是输出

CMD ls -l /etc/gshadow
lrwxrwxrwx    1 root     root            15 Jun 22 08:46 /etc/gshadow -> /home/+/gshadow
:

^[[64;5Ruser@system:~/home$ 4;5R

为什么我会在提示周围出现这些字符,我该如何防止这种情况发生?

标签: pythonpython-3.xpexpect

解决方案


根据pexpect 文档

每次调用和属性后,都会将其设置为expect()应用程序打印的文本。该属性将包含所有文本,直到预期的字符串模式。beforeafterbefore

因此,您看到的字符代表发送到终端的原始字符串,并且在直接使用终端时通常不会看到。这包括颜色、光标定位、控制字符等的说明。

您可以在这篇 wikipedia 文章中找到一些字符:ANSI_escape_code

完全防止它们可能涉及为它们查找/编写解析器。所以也许改变你的模式会是一个更简单的解决方案?

这是一个类似的 SO 问题,涉及pexpect 和 escapes

这个答案还提供了一种处理控制字符的方法。


推荐阅读