Python串行读取bu

2024-10-01 09:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

由于性能原因,我正在尝试生成一个串行读取缓冲区,而不是使用readlines(),但我无法按预期工作。 我从下面的blog post中得到了一些启发。在

我的readBuffer类定义如下:

def readBuffer(self):
    try:
        data = self.gpsdevice.read(1)
        n = self.gpsdevice.inWaiting()
        if n:
            data = data + self.gpsdevice.read(n)
        return data
    except Exception, e:
        print e
        sys.exit(1)

我正在通过uart读取NMEA数据,我需要它逐行输出,但当我执行以下测试时,输出并不是预期的那样

^{pr2}$

输出:

$GNDTM,W84,,0.0000,N,0.0000,E,0.0000,W84*41
$GNGNS,,,,,,NN,00,,,,,,C*3C
$GNGBS,,,,,,,,,1,1*5F
$GNGBS,
,,,,,,,,2,1*5C
$GNRMC,,V,,,,,,,,,,N,C*22
$GNVTG,,T,,M,,N,,K,N*32
$GNZDA,,,,,00,00*56

$GNDTM,W84,,0.0000,N,0.0000,E,0.0000,W84*41
$GNGNS,,,,,,NN,00,,,,,,C*3C
$GNGBS,,,,,,,,,1,1*5F
$GNGBS,
,,,,,,,,2,1*5C
$GNRMC,,V,,,,,,,,,,N,C*22
$GNVTG,,T,,M,,N,,K,N*32
$GNZDA,,,,,00,00*56

$GNDTM,W84,,0.0000,N,0.0000,E,0.0000,W84*41
$GNGNS,,,,,,NN,00,,,,,,C*3C
$GNGBS,,,,,,,,,1,1*5F
$GNGBS,
,,,,,,,,2,1*5C
$GNRMC,,V,,,,,,,,,,N,C*22
$GNVTG,,T,,M,,N,,K,N*32
$GNZDA,,,,,00,00*56

$GNDTM,W84,,0.0000,N,0.0000,E,0.0000,W84*41
$GNGNS,,,,,,NN,00,,,,,,C*3C
$GNGBS,,,,,,,,,1,1*5F
$GNGBS,
,,,,,,,,2,1*5C
$GNRMC,,V,,,,,,,,,,N,C*22
$GNVTG,,T,,M,,N,,K,N*32
$GNZDA,,,,,00,00*56

我希望在每一行的开头有sentencetype($GN…),因为我需要能够将行拆分成一个列表。这是因为我需要计算每种句子类型之间出现的时间。在

我用readline()完成了整个过程,但是由于我要传递很多行,而且需要时间来控制,所以我认为使用read()更好。在

我做错什么了?在


Tags: selfreaddata时间nn性能readbuffergnrmc