2

我目前正在尝试在 python 脚本中捕获串行数据。我打算开始捕获在串行端口上捕获的所有数据的日志,同时脚本的其余部分继续与我正在测试的系统进行交互。

如果我使用 pyserial,我相信它最终会阻止我想要执行的其余测试,直到我完成记录为止。

我考虑过的选择是:

  • 使用 pyserial 编写另一个脚本来捕获日志,使用 subprocess.Popen() 调用此脚本
  • 使用内置的 unix 工具,例如 tail 或 cat 并使用 subprocess.Popen() 调用它们

我相信我可以找到一种方法来让其中任何一个工作,但如果有人知道更直接的方法,那么我很想知道。

先感谢您。

4

2 回答 2

6

为什么要创建另一个从 pySerial 读取数据的进程?对于非阻塞读取,您可以在串行类中配置超时。例如

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 0
ser.timeout = 2 #By default, this is set to None
ser.open()

另请查看包装类以供参考。

http://pyserial.sourceforge.net/examples.html#wrapper-class

您可以运行一个线程来继续从串行读取数据并将其更新到缓冲区。

创建另一个进程涉及 IPC 的开销,不建议用于此任务。

于 2012-07-23T10:14:49.410 回答
3

您可以随时通过查看链接检查是否有可用数据ser.inWaiting()

from serial import Serial
ser = Serial(port=0, baudrate=19200) # set the parameters to what you want
while 1:
    if ser.inWaiting():
        temp = ser.read()
    #all the other code in the loop

如果没有可读取的数据,则循环跳过串行读取

或者如果数据对时间敏感,您可以这样

于 2013-01-14T14:57:37.103 回答