Python Serial:如何使用 read 或 readline 函数一次读取超过 1 个字符

新手上路,请多包涵

我无法使用我的程序读取多个字符,我似乎无法弄清楚我的程序出了什么问题。

 import serial

ser = serial.Serial(
    port='COM5',\
    baudrate=9600,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

print("connected to: " + ser.portstr)
count=1

while True:
    for line in ser.read():

        print(str(count) + str(': ') + chr(line) )
        count = count+1

ser.close()

这是我得到的结果

connected to: COM5
1: 1
2: 2
3: 4
4: 3
5: 1

其实我期待这个

connected to: COM5
1:12431
2:12431

像上面提到的那样可以同时读取多个字符而不是一个一个地读取。

原文由 user2294001 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 971
1 个回答

我看到了几个问题。

第一的:

ser.read() 一次只会返回 1 个字节。

如果你指定一个计数

ser.read(5)

它将读取 5 个字节(如果在 5 个字节到达之前发生超时则更少。)

如果您知道您的输入总是以 EOL 字符正确终止,更好的方法是使用

ser.readline()

这将继续读取字符,直到收到 EOL。

第二:

即使您让 ser.read() 或 ser.readline() 返回多个字节,由于您正在迭代返回值,您仍然会一次处理一个字节。

摆脱

for line in ser.read():

只是说:

 line = ser.readline()

原文由 jwygralak67 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题