正在尝试调试十六进制指令,但 python 清除了我的控制台?
Attempting to debug hex instruction, but python clears my console?
我正在编写驱动程序并根据一些条件连接一些十六进制指令。到目前为止,所有指令都按预期工作。
我正在处理的一条新指令没有按预期工作,所以我尝试在连接之后和执行之前打印出指令以查看错误所在。
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'
相同(还有 half-dozen 其他拼写方式)。字母 c
对 Python 没有任何特殊意义。
c
之前的字符 '\x1b'
是 Escape。这对 Python 也没有什么特别的意义——但它可能对您的终端有影响。大多数终端使用以 Escape 开头并以字母结尾的 "escape sequences" 来执行向上滚动、更改主要文本颜色或清除屏幕等操作。
如果这妨碍了交互式调试会话,您可能需要考虑打印字符串的 repr
而不是字符串本身。最简单的方法是甚至不使用 print
:
>>> msg = b'\x1b\x63'
>>> msg
b'\x1bc'
>>> print(repr(msg))
b'\x1bc'
请注意,无论哪种方式,它都包含 b
和引号,并且 hex-escapes 所有 non-printable 字节。它与 Unicode 字符串而不是字节字符串基本相同:
>>> msg = '\x1b\x63'
>>> msg
'\x1bc'
>>> print(repr(msg))
'\x1bc'
如果您使用 Python 2.x,您将在 Unicode 上使用 u
前缀而不是 none,并且没有前缀而不是 b
字节数上,但基本相同。
我正在编写驱动程序并根据一些条件连接一些十六进制指令。到目前为止,所有指令都按预期工作。
我正在处理的一条新指令没有按预期工作,所以我尝试在连接之后和执行之前打印出指令以查看错误所在。
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'
相同(还有 half-dozen 其他拼写方式)。字母 c
对 Python 没有任何特殊意义。
c
之前的字符 '\x1b'
是 Escape。这对 Python 也没有什么特别的意义——但它可能对您的终端有影响。大多数终端使用以 Escape 开头并以字母结尾的 "escape sequences" 来执行向上滚动、更改主要文本颜色或清除屏幕等操作。
如果这妨碍了交互式调试会话,您可能需要考虑打印字符串的 repr
而不是字符串本身。最简单的方法是甚至不使用 print
:
>>> msg = b'\x1b\x63'
>>> msg
b'\x1bc'
>>> print(repr(msg))
b'\x1bc'
请注意,无论哪种方式,它都包含 b
和引号,并且 hex-escapes 所有 non-printable 字节。它与 Unicode 字符串而不是字节字符串基本相同:
>>> msg = '\x1b\x63'
>>> msg
'\x1bc'
>>> print(repr(msg))
'\x1bc'
如果您使用 Python 2.x,您将在 Unicode 上使用 u
前缀而不是 none,并且没有前缀而不是 b
字节数上,但基本相同。