试图调试十六进制指令,但python清除我的控制台?

时间:2018-03-21 01:24:20

标签: python binary hex driver

我正在编写驱动程序,并根据一些条件连接一些十六进制指令。到目前为止,所有说明都按预期工作。

我正在处理的新指令没有按预期工作,所以我试图在连接之后和执行之前打印出指令以查看错误。

msg = '\xc2%s%s' % ('\x1b\x63', '07')
assert self.dev.ctrl_transfer(0x21, 9, 0x0300, 0, msg) == len(msg)
print(msg)

当我在连接后打印它时,它会清除控制台并打印'07',然后继续执行其余的驱动程序。我能够打印并执行我连接的所有其他指令,例如以下内容,没有问题。

msg = '\xc2%s%s' % ('\x1b\x72, '07')

有谁知道为什么会这样? '\ x63'字节是否告诉python做一些我不知道的事情?它应该与指令的其余部分连接,然后是'\ x07'字节。请注意,如果我在'07'之前加入'\ x'(与我上面的代码不同),它仍然会做同样的事情,它只是不打印'07',它留下一个空行。

谢谢!

1 个答案:

答案 0 :(得分:1)

角色'\x63''c'的角色相同(以及其他六种拼写方式)。字母c并不代表Python的任何特殊内容。

'\x1b'之前的角色c是Escape。这对Python来说并不意味着什么特别 - 但它可能对你的终端有所帮助。大多数终端使用"转义序列"从Escape开始并以字母结束,例如向上滚动,更改主文本颜色或清除屏幕。

如果这妨碍了交互式调试会话,您可能需要考虑打印字符串的repr而不是字符串本身。最简单的方法是不使用print

>>> msg = b'\x1b\x63'
>>> msg
b'\x1bc'
>>> print(repr(msg))
b'\x1bc'

请注意,无论哪种方式,它都包含b和引号 - 并且它以十六进制方式转义所有不可打印的字节。它与Unicode字符串基本相同,而不是字节字符串:

>>> msg = '\x1b\x63'
>>> msg
'\x1bc'
>>> print(repr(msg))
'\x1bc'

如果你正在使用Python 2.x,那么你在Unicode上会有u个前缀而不是前缀,并且在字节上没有前缀而不是b,但是基本相同。