python - 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
为什么我会在提示周围出现这些字符,我该如何防止这种情况发生?
解决方案
根据pexpect 文档:
每次调用和属性后,都会将其设置为
expect()
子应用程序打印的文本。该属性将包含所有文本,直到预期的字符串模式。before
after
before
因此,您看到的字符代表发送到终端的原始字符串,并且在直接使用终端时通常不会看到。这包括颜色、光标定位、控制字符等的说明。
您可以在这篇 wikipedia 文章中找到一些字符:ANSI_escape_code。
完全防止它们可能涉及为它们查找/编写解析器。所以也许改变你的模式会是一个更简单的解决方案?
这是一个类似的 SO 问题,涉及pexpect 和 escapes。
这个答案还提供了一种处理控制字符的方法。
推荐阅读
- java - 为什么我的代码除了正确之外还显示 NZCE 错误
- python - Pandas:如何在新列上重复将数据框写入 csv?
- laravel - 如何使 orwhere laravel 雄辩仅适用于某些 where 子句?
- hbase - 如何计算 HBASE 中的 Memstores、WAL 和块缓存?
- r - 在R中,在tidymodels的配方中选择X个第一个PCA组件
- javascript - 有哪些方法可以清理异步代码以提高可读性?
- java - Spring不使用测试配置bean进行测试
- javascript - 将 document.querySelector 或 document.querySelectorAll 的结果转换为 jquery 对象,反之亦然,无需重新选择?
- r - 如何使用第二个数据框对数据框进行子集化
- apache-kafka - Debezium 与 Kafka 版本的兼容性