【问题标题】:Decode() prints extra characters around the prompt解码()在提示周围打印额外的字符
【发布时间】:2021-09-10 16:04:33
【问题描述】:

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

这是脚本:

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

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

【问题讨论】:

  • p pexpect?
  • p=pexpect.spawn('ssh root@%s'% addr)
  • 您应该 edit 您的问题在此处提供该信息,而不是将其隐藏在 cmets 中(尽管现在最简单,如果您只是批准提议的编辑)。

标签: python python-3.x pexpect


【解决方案1】:

根据pexpect docs

在每次调用 expect() 之后,beforeafter 属性将是 设置为子应用程序打印的文本before 属性将 包含符合预期字符串模式的所有文本。

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

您可以在这篇维基百科文章中找到一些字符:ANSI_escape_code

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

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

This answer还提供了处理控制字符的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多