在后台进程中捕获串行数据

时间:2012-07-23 09:41:19

标签: python serial-port subprocess pyserial

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

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

我考虑的选择是:

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:6)

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

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的开销,不建议用于此任务。

答案 1 :(得分:3)

您随时可以使用ser.inWaiting() see link

检查是否有可用数据
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

如果没有可用的数据来读取循环,则会跳过序列读数

或者如果数据是时间敏感的,您可以执行this