【问题标题】:update pyserial data in real time with flask [duplicate]使用烧瓶实时更新pyserial数据[重复]
【发布时间】:2018-08-11 18:55:59
【问题描述】:

我试图实时查看数据,我必须关闭 python 程序才能刷新数据。只有当我关闭 python 文件并重新启动它时它才会刷新。我希望数据实时刷新。

from flask import Flask
import serial



app = Flask(__name__)

water = serial.Serial("COM4",9600)
water1 = water.readline().decode('ascii')

# @ signifies a decorator
@app.route('/')
def index():
    return 'This is home page'

@app.route('/plant')
def plant():
    while True:
        return '<h2>soil is:</h2> ' + water1 + '%'





if __name__=="__main__":
    app.run()

【问题讨论】:

    标签: python flask pyserial


    【解决方案1】:

    这取决于您所说的“实时”是什么意思。我们先来看看 Flask 是如何工作的。

    为什么它不起作用

    在带有@app.route 装饰器的函数之外的所有东西都只会在服务器启动时执行一次。这就是为什么您的数据当前只提取一次,您的数据提取代码在这些函数之外:

    water = serial.Serial("COM4",9600)
    water1 = water.readline().decode('ascii')
    

    页面刷新时刷新数据

    现在,修复它的最简单方法是在每次刷新页面时获取数据,如下所示:

    @app.route('/plant')
    def plant():
        water = serial.Serial("COM4",9600)
        water1 = water.readline().decode('ascii')
        # while True: // don't use while True though, it'll freeze your program forever.
            return '<h2>soil is:</h2> ' + water1 + '%'
    

    由于每次刷新页面时都会执行plan(),因此您的数据也会随之更新。

    “实时”刷新数据

    还有第三个选项,以实现通常称为“实时”的结果。但是,如果不使用 Javascript,您将无法绕过它。在这种情况下,您设置了一个 API,它将返回您将从 Javascript 调用的数据。

    但是,我怀疑您真正想要做的是在页面刷新时刷新数据。如果不是这样,请在下面给我写评论,我会更新我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2023-03-13
      • 2023-03-31
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多