【问题标题】:How do I send python lists to a bottle server?如何将 python 列表发送到瓶子服务器?
【发布时间】:2019-05-31 04:11:06
【问题描述】:

我有一个 python 文件,其中包含 4 个 python 列表,这些列表从连接到 rpi 热点的设备获取基本信息(ip、主机、mac、信号)。我想不断地将这些列表从 Rpi 发送到瓶子服务器,因为这些信息会随着时间的推移而改变(设备断开连接,改变其信号......)。最后,在 HTML 上打印该信息。如何以简单的方式不断发送信息?网络套接字?阿贾克斯?

【问题讨论】:

    标签: python bottle


    【解决方案1】:

    您可以在您的 RPI 热点上设置一个 cron 作业,该作业定期执行一个 curl 命令,其中 python 列表的内容为 JSON。您在问题中提到了“python 列表”,如果您只是将数据存储在 .py 文件中,那么我建议您将其写入另一种格式,例如 json。

    每分钟从 RPI 设备发送数据

    # 1 0 0 0 0 curl -vX POST http://example.com/api/v1/devices -d @devices.json --header "Content-Type: application/json"
    

    然后在你的瓶子文件中有一个接收数据 POST 的方法和另一个可以显示数据 GET 的方法。该示例只是将接收到的数据写入服务器上的一个json文件

    from bottle import route, run
    import json
    
    @route('/api/v1/devices', method='GET')
    def index(name):
        with open('data.json') as f:  
            return json.load(f)
    
    
    @route('/api/v1/devices', method='POST')
    def index(name):
        req_data = request.json
        with open('data.json', 'r+') as f:
            data = json.load(f.read())
            # output = {**data, **req_data} # merge dicts
            output = data + req_data # merge lists
            f.seek(0)
            f.write(output)
            f.truncate()
        return {success: True}
    
    run(host='localhost', port=8080)
    

    注意:我没有测试此代码,它是为了让您了解如何完成您的请求。

    【讨论】:

    • 我不明白为什么在 curl 中你使用 @device.json,在 get 位中你使用 data.txt,在帖子中你使用 devices.json。不应该一样吗?除此之外,代码在浏览器上显示 404 错误。我应该如何运行它?我正在做的是运行服务器,然后从 rpi 运行 curl 命令,但它似乎不起作用。
    • 修复了本地文件命名不一致的问题。使用 curl 发送的文件不应与服务器上存储数据的文件相同。这只是作为一个示例来说明如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2018-07-14
    • 2017-10-16
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多