发送 CTRL+ L 的 Python 串行命令

Sij*_*tha 2 python windows pyserial python-3.x

我有一个客户显示器,它连接到串行端口。为此,我正在使用 Windows 机器。

图片

我想发送Ctrl+L来清除客户显示的显示,但我找不到对我有帮助的解决方案。基本上我希望Ctrl将来发送+'任何命令'。

在命令提示符中,我可以使用“ Ctrl+ L”清除现有显示并显示文本。以下是在提示符中显示的命令

echo ^LDisplay me > COMX // ^L is actually CTRL + L 
Run Code Online (Sandbox Code Playgroud)

以上将输出为,

  1. 清除显示。

  2. 显示“显示我”

现在我正在尝试使用 Python 串行连接器来实​​现相同的目的。

import serial
ser = Serial ('COM5',timeout=2)
ser.write("\x0C") # equivalent to ctrl+L
Run Code Online (Sandbox Code Playgroud)

这根本行不通。我收到错误为`

串行连接异常:不支持unicode字符串,请编码为字节:'\x03'

但是,如果我对普通文本尝试以下操作,则效果很好,

ser.write("Display me".encode()
Run Code Online (Sandbox Code Playgroud)

这会在客户显示屏中显示“显示我”。

我尝试使用,ser.write("\x0C".encode())但没有输出。

我得到错误

串行连接异常:不支持unicode字符串,请编码为字节:'\x1fc\x00'

我将不胜感激任何建议、改进和帮助解决这个问题。谢谢。

Ste*_*uch 6

要将Ctrl+编码L为 Python3 中的字节,您应该使用:

b'\x0c'
Run Code Online (Sandbox Code Playgroud)

为什么?

Ascii 控制字符被编码为它们在字母表中的位置,所以Ctrl+ C,因为它是字母表的第三个字母,编码为十六进制字符串,将是\x03. 同样,Ctrl+L\x0c(十六进制 C 是十进制 12)。

在 python 3 中获取字节,您可以在字符串前加上b.