运行flask应用程序并继续运行脚本

时间:2019-07-03 18:15:52

标签: python python-3.x flask

我有一个简单的烧瓶应用程序:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    text = '<h2>Text: </h2><form><input name="firstname" type="text">'
    select = '<h2>Select: </h2><select name="cars">' + \
              '<option value="volvo">Volvo</option>' + \
              '<option value="saab">Saab</option>' + \
              '<option value="fiat">Fiat</option> ' + \
              '<option value="audi">Audi</option>' + \
            '</select>'
    multiselect = '<h2>Multiselect: </h2><select name="mCars" multiple>' + \
              '<option value="volvo">Volvo</option>' + \
              '<option value="saab">Saab</option>' + \
              '<option value="fiat">Fiat</option> ' + \
              '<option value="audi">Audi</option>' + \
            '</select>'
    textarea = '<h2>Textarea: </h2><textarea name="message" rows="10" cols="30">' + \
                'The cat was playing in the garden.' + \
                '</textarea>'
    button = '<h2>Button</h2><button type="button" onclick="alert(\'Hello World!\')">Click Me!</button>'
    # datalist = '<h2>Datalist</h2><datalist id="browsers">' + \
    #               '<option value="Internet Explorer">' + \
    #               '<option value="Firefox">' + \
    #               '<option value="Chrome">' + \
    #               '<option value="Opera">' + \
    #               '<option value="Safari">' + \
    #             '</datalist> '
    return '<h1>Sample Form</h1>' + \
           text + \
           select + \
           multiselect + \
           textarea + \
           button


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

当我运行文件本身时,它将运行:

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

我正在尝试从运行程序文件运行它并继续执行该文件。烧瓶运行时它将停止执行。我尝试了以下方法。

os.system('python ' + get_driver_file_path(Settings.TestProjectPath))

我认为这很有意义,因为我正在运行它。

我尝试过,它也可以运行,但是会停止执行:

subprocess.call([Settings.PythonExecutablePath, get_driver_file_path(Settings.TestProjectPath)])

我尝试过:

server = Popen(get_driver_file_path(Settings.TestProjectPath), stdout=PIPE, stderr=PIPE, shell=True)

这似乎无能为力。

如何获取它以运行Flask服务器并继续执行?

4 个答案:

答案 0 :(得分:1)

我在本地计算机上成功运行了subprocess.Popen(['python3', 'app.py']),因此从技术上来说应该可以运行。我唯一不确定的是我在终端中运行了此命令,而关闭终端也可能已经关闭了子进程。

答案 1 :(得分:1)

您只需要保留即可在后台运行应用程序

import os
os.system("python "+ "app.py &" )
print "hello, its working, flask is running backgound "

对于Windows

import os
os.system("start /b python app.py")
print("It works..!")

确保将python添加到PATH

答案 2 :(得分:0)

您不想运行Flask应用程序,然后继续执行脚本。

实际上,您想启动 Flask应用程序,并在其运行时继续执行脚本。

我想multiprocessing "spawn"是启动Flask应用程序所需要的。

如果脚本的后续步骤取决于它的运行,则可能需要等到新进程(例如,在localhost:5000上监听)实际开始处理请求时。

答案 3 :(得分:0)

from threading import Thread

if __name__ == '__main__':
    Thread(target=app.run).run()
    print("App is running")