我正在编写一个驱动程序,并根据一些条件连接一些十六进制指令。到目前为止,所有指令都按预期工作
我正在处理的一条新指令没有按预期工作,因此我尝试在连接之后和执行之前打印出该指令,以查看错误
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',而是留下一个空行
谢谢
字符
'\x63'
与'c'
是同一个字符(还有六种其他拼写方法)。字母c
对Python没有任何特殊的含义在
c
前面的字符'\x1b'
是Escape。这对Python也没有什么特别的意义,但对您的终端来说可能是这样。大多数终端使用“转义序列”,以转义开始,以字母结束,这样可以向上滚动、更改主文本颜色或清除屏幕如果这妨碍了交互式调试会话,您可能需要考虑打印字符串的
repr
,而不是字符串本身。最简单的方法是不使用print
:请注意,无论哪种方式,它都包含
b
和引号,并且十六进制转义所有不可打印的字节。它的工作原理与Unicode字符串基本相同,而不是字节字符串:如果您使用的是Python2.x,Unicode上的前缀是
u
,而不是无前缀,字节上的前缀是b
,但基本相同相关问题 更多 >
编程相关推荐