让python脚本与烧瓶应用

时间:2018-03-24 17:17:12

标签: python flask

我有两个独立循环运行的脚本:一个生成数据的简单python脚本

myData=0
while True:
    myData = get_data() # this data is now available for Flask App

和显示数据的烧瓶应用程序

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world(myData):
    return str(myData)

app.run()

我希望以某种方式连接两个脚本,因此应用程序显示python脚本生成的数据。

myData=0
app = Flask(__name__)

@app.route('/')
def hello_world(myData):
    return str(myData)

app.run()  # does not return until server is terminated

while True:
    myData = get_data()

当我如上所示组合脚本时,我可以看到执行没有进入while循环(过去app.run()行),直到我终止应用程序。

我发现了一个类似的问题here,但没有任何帮助,另一个问题here与我正在尝试的相同,但它也没有给我任何线索。我找不到任何告诉如何使烧瓶应用程序与单独运行的脚本进行通信的信息。这是一个类似的question没有明确的答案。请让我了解这两件事应该如何一起运行,或者非常感谢一个例子。

2 个答案:

答案 0 :(得分:1)

由于您的脚本无限期地生成数据,我建议将其转换为generator并从Web请求处理程序迭代它:

def my_counter():
    i = 0
    while True:
        yield i    # I'm using yield instead of return
        i = i + 1

my_counter_it = my_counter()

@app.route('/')
def hello_world():
    return str(next(my_counter_it))  # return next value from generator

您还可以与长时间运行的单独进程(外部命令)进行通信:

import subprocess

def my_counter():
    # run the yes command which repeatedly outputs y
    # see yes(1) or http://man7.org/linux/man-pages/man1/yes.1.html
    p = subprocess.Popen('yes', stdout=subprocess.PIPE)

    # the following can also be done with just one line: yield from p.stdout
    for line in p.stdout:
        yield line

答案 1 :(得分:0)

您可以创建一个处理数据的函数,然后可以在路径上提供:

dot.notation