从命令lin的输出逐行处理

2024-05-03 17:25:50 发布

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

我有来自source的Python代码,可以用来处理GPRMC格式。我修改了数据来自"gpsd -d | awk -F ':' 'BEGIN{OFS=\":\"}{print $2}' | grep GPRMC"的代码,其列表如下:

$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70

所以当我启动它时,我得到了一个错误:

data = ser.readline()
AttributeError: 'str' object has no attribute 'readline

以下是代码的一部分:

port = "gpsd -d | awk -F ':' 'BEGIN{OFS=\":\"}{print $2}' | grep GPRMC"

print("Receiving GPS data")
ser = port

find = False
while find == False:
    print("Waiting for GPRMC data")
    data = ser.readline()
if data[0:6] == "$GPRMC":
    parsingData = data.split(",")
    print(parsingData)
if parsingData[2] == "A":
    parseGPS(data)
    find = True

请帮我把这个修好。 ps:我不是python的程序员,只是几天我才开始使用这种语言,很抱歉我的英语不好


Tags: 代码falsedatareadlineportfindgrepser
2条回答

从我读到的:你跑

gpsd -d | awk -F ':' 'BEGIN{OFS=\":\"}{print $2}' | grep GPRMC

在操作系统中,它返回

$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70

这是我的解决方案。希望对您有所帮助:

from subprocess import Popen, PIPE
from re import search 

process = Popen("gpsd -d | awk -F ':' 'BEGIN{OFS=\":\"}{print $2}' | grep GPRMC", stdout=PIPE, shell=True, universal_newlines=True) 
while True: 
    line = str(process.stdout.readline())
    if not line: 
        break

    print("Receiving GPS data")
    find = False
    print(line)

    while find == False:  
        if search(r'$GPRMC', line):
            print("Waiting for GPRMC data")
            parsingData = line.strip().split(",")
            print(parsingData)
            if parsingData[2] == "A":
                parseGPS(data)
                find = True

这里有两个问题。你知道吗

(1)ser是一个字符串。您需要先运行该字符串中的命令,然后才能获得任何输出。你知道吗

(2)一旦有了输出,就不会使用readline——这就是从打开的文件中读取行的方式,并且输出不会在文件中。你知道吗

熟悉如何通过python运行OS命令。有很多方法可以做到这一点。如果你不知道从哪里开始,这里有一个很好的概述:https://stackoverflow.com/a/92395

相关问题 更多 >