前面所有关于连接到作为客户端的gpsd守护进程的python代码的答案要么引用了非常旧的库,要么不起作用.

我在这里的官方website上try 了这个示例代码--这也不起作用.

代码是:

import gps           

session = gps.gps(mode=gps.WATCH_ENABLE)

try:
    while 0 == session.read():
        if not (gps.MODE_SET & session.valid):
            # not useful, probably not a TPV message
            continue

        print('Mode: %s(%d) Time: ' %
              (("Invalid", "NO_FIX", "2D", "3D")[session.fix.mode],
               session.fix.mode), end="")
        # print time, if we have it
        if gps.TIME_SET & session.valid:
            print(session.fix.time, end="")
        else:
            print('n/a', end="")

        if ((gps.isfinite(session.fix.latitude) and
             gps.isfinite(session.fix.longitude))):
            print(" Lat %.6f Lon %.6f" %
                  (session.fix.latitude, session.fix.longitude))
        else:
            print(" Lat n/a Lon n/a")

except KeyboardInterrupt:
    # got a ^C.  Say bye
    print('')

# Got ^C, or fell out of the loop.  Cleanup, and leave.
session.close()
exit(0)

但当我try 此代码时,错误是:TypeError: JSONDecoder.__init__() got an unexpected keyword argument 'encoding'

完整堆栈跟踪为:

TypeError TraceBack(最近一次调用) 第6行[11]中的单元格 3会话=gps.gps(模式=gps.WATCH_ENABLE) 5try : ->6 When 0==会话.Read(): 7如果不是(gps.MODE_SET&ession.valid): 8#没有用处,可能不是TPV消息 9继续

文件~/test_fft/venv/lib/python3.11/site-packages/gps/gps.py:285,在gps.read(self)中 283 返回状态 284如果self.response.startswith("{")和self.response.endswith("}\r\n"): --285 self.unpack(self.response) 286 self .oldstyle_shim() 287 self.valid |= PACKET_SET

Gpsjson.unpack中的文件~/test_fft/venv/lib/python3.11/site-packages/gps/client.py:199,(自身,buf) 197"解压JSON字符串" 198try : -->199 self.data=dictwRapper(json.ads(buf.strie(),Coding="ascii")) 200除ValueError外,e: 201提高json_error(buf,e.args[0])

File /usr/lib/python3.11/json/init.py:359,in loads(s,cls,object_hook,parse_float,parse_int,parse_constant,object_pairs_hook,**kw) 357如果parse_constant不是None: 358 kw = parse_constant --359 return cls(**kw).decode(s)

TypeError:JSONDecoder.init()获得意外的关键字参数""Coding""

这里还有一些其他的老答案: Using GPS library in Python 3gpsd python client

有没有一个python3客户端可以维护gpsd,或者有没有人知道一种从python向gpsd轮询gps位置的方法?

推荐答案

有一个方法可以在python 3中使用:

import gpsd

# Connect to the local gpsd
gpsd.connect()
# Get the current position
packet = gpsd.get_current()
# Get the latitude and longitude
latitude = packet.lat
longitude = packet.lon
print("Latitude:", latitude)
print("Longitude:", longitude)

它使用:https://github.com/MartijnBraam/gpsd-py3,或者这里有一个维护的派生版本:https://github.com/hatsunearu/py-gpsd2

然而,在我最初的帖子中,问题是我使用的是venv--所以当我在venv中运行gpsd时,我得到的是默认的(也是非常旧的)版本的gpsd(3.19 IIRC).

解决这个问题的第二部分是切换到venv,升级到根目录,安装gpsd-然后使用GPS客户端的python代码使用venv的已安装版本.

Python-3.x相关问答推荐

Pandas 数据帧断言等同于NaN

PythonPandas 创建一个列并添加到DataFrame

如何使用Python将嵌套的XML转换为CSV

如何将python点击参数设置为与选项回调不同的参数的别名?

无法导入名称';核心';来自部分初始化的模块';tensorflow_datasets';(很可能是由于循环导入)

类变量的Python子类被视为类方法

如何将 WebDriver 传输到导入的测试?

Python base64.b32hexencode 未创建预期结果

将逗号分隔的字符串类型系列转换为整数列表 pandas

如何向 scikit-learn 函数添加类型提示?

将名字转换成姓氏、首字母和中间字母的格式

是否将dict转换为一个数据帧,每个值都有重复的键?

'~'(波浪号)运算符在 Python 中的应用

Selenium (Python) - 使用 Chrome 网络驱动程序等待下载过程完成

如何在 Python3 中添加带有标志的命令行参数?

所有 Python dunder 方法的列表 - 您需要实现哪些方法才能正确代理对象?

如何遍历某些扩展名的文件?

向 Python 函数添加属性的最佳方法

使用 python 3.0 的 Numpy

如何更改 tkinter 文本小部件中某些单词的 colored颜色 ?