Python 使用pySerial和socat发送字节时出现问题

Python 使用pySerial和socat发送字节时出现问题,python,pyserial,socat,Python,Pyserial,Socat,我想通过pySerial发送一些字节。出于测试目的,我使用socat创建了虚拟串行端口: socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600 下面是python代码: ser = serial.Serial('./ptyp1') x = struct.pack('B',2) print binascii.hexlify(x) # 02 ser.write(x) y = ser.read(2) print binascii.hexlify(y)

我想通过pySerial发送一些字节。出于测试目的,我使用socat创建了虚拟串行端口:

socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600
下面是python代码:

ser = serial.Serial('./ptyp1')
x = struct.pack('B',2)
print binascii.hexlify(x) # 02
ser.write(x)
y = ser.read(2)
print binascii.hexlify(y) # 5e42
我得到的输出:

02   # x
5e42 # y
我期望的结果是:

02 # x
02 # y
我做错了什么?是socat还是python

编辑:

我刚刚注意到不同x值的一些其他奇怪行为。以下是输出:

x = 12  => y = 5E 52 0D 0A 5E 50
x = 100 => y = 100 # why does it work here?
解决方案:


问题是我在写的同一个端口上读取。如果我做对了,socat将两个端口“连接”为“输入”和“输出”。因此,如果我写信给./ptyp1,我必须继续阅读./ptyp2。在那之后,一切都很好。

我已经安装了socat来测试您的代码。我已经运行了这条线路:

socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600
然后,以下代码起作用:

from binascii import hexlify
from serial import Serial, struct

ser = Serial('ptyp1')
x = struct.pack('B', 2)
print hexlify(x) # 02
ser.write(x)
y = ser.read()
print hexlify(y) # 5E
y = ser.read()
print hexlify(y) # 42
输出:

02
5e
42

您似乎得到的是字符串“^B”。可能是
socat
(或沿途的其他内容)正在将您发送的字节(
\x02
)解释为某种控制代码


在我脑海中,
Ctrl-B
是一种回页助记符,但我不确定

问题是我在写入的同一端口上读取。如果我做对了,socat将两个端口“连接”为“输入”和“输出”。因此,如果我写信给./ptyp1,我必须继续阅读./ptyp2。在那之后,一切都很好。

好的,但我不明白:为什么我只写1(02),却可以读2个字节(5e42)。如何写入1个字节并读取相同的字节?