Flask Web服务器|停止python脚本会导致崩溃

Flask Web服务器|停止python脚本会导致崩溃,python,html,flask,raspberry-pi,raspberry-pi3,Python,Html,Flask,Raspberry Pi,Raspberry Pi3,我正在运行一个带有覆盆子Pi3B+的flask Web服务器。html网站有一些文本和两个按钮。一个按钮运行外部python脚本(不是flask python脚本),一个按钮停止python脚本 到目前为止,按下“开始”按钮可以使我的外部python脚本按我希望的方式运行。这很好用,我对此毫无怨言 我希望我的“停止”按钮停止我用“开始”按钮开始运行的外部python脚本。脚本中有一个永无止境的while循环 我已经尝试了我能想到的一切: 创建一个“正在运行”的布尔变量,使while循环仅在该变

我正在运行一个带有覆盆子Pi3B+的flask Web服务器。html网站有一些文本和两个按钮。一个按钮运行外部python脚本(不是flask python脚本),一个按钮停止python脚本

到目前为止,按下“开始”按钮可以使我的外部python脚本按我希望的方式运行。这很好用,我对此毫无怨言

我希望我的“停止”按钮停止我用“开始”按钮开始运行的外部python脚本。脚本中有一个永无止境的while循环

我已经尝试了我能想到的一切:

  • 创建一个“正在运行”的布尔变量,使while循环仅在该变量等于true时运行,然后使用“停止”按钮更改该变量
  • 在我的外部脚本中有一个“exit()”函数,我在按下“stop”按钮时调用它
这些都不管用。它只会导致我的Web服务器崩溃,我的外部脚本继续运行(lol)

I get“TypeError:view函数未返回有效响应。”

我的烧瓶代码:

from flask import Flask, render_template
import miniMSA_Version2 as MSA

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/run')
def run_MSA():
    return MSA.run()

@app.route('/stop')
def stop_msa():
    return MSA.stop()

if __name__ == "__main__":
   app.run(host="0.0.0.0", port=80, debug=True)
我的html代码:

<!doctype html>

<head>
<title> MSA Webpage </title>
<meta charset=utf-8>
</head>

    <body>
       <h1> heading </h1>
       <h2> 2nd heading </h2>
       <p> cool paragraph </p>
       <button> <a href="/run"> Start </a> </button>
       <button> <a href="/stop"> Stop </a> </button>
    </body>

这个建议应该可以解决问题,但可能需要重新安排

  • 不要将MSA内容导入flask应用程序。相当地通过操作系统调用调用MSA

    操作系统('./MSA_script.py参数&'))

  • 请注意使其在后台运行的“&”(另一个/新进程)

  • 让MSA脚本偶尔检查文件是否存在。“STOP.txt”。你甚至不需要它来包含任何东西。如果存在,停止循环

  • flask中的stop call可以创建stop.txt文件

  • 您可能还希望在关闭之前或在启动脚本之前删除STOP.txt文件


  • 也许是一种奇怪的方式?idk。但我认为它会起作用。。让它成为一个守护进程。允许您执行操作系统调用,如

    python program.py stop
    python program.py start
    python program.py restart
    
    一些相关信息


    您能显示MSA.stop()后面的代码吗?我为该函数尝试了两种不同的方法。首先,我尝试使用python的exit()函数终止脚本。我尝试的第二件事是让我的while循环仅在“running”变量为true时运行,我使用stop函数将该变量设置为false。这两项工作我都不能肯定,但我认为“开始”按钮现在也不能像你想象的那样工作。一旦python进入这个循环,它就会冻结你的整个应用程序,因为它都在同一个进程中运行。@MRxParkour啊,好吧,这绝对是可能的。我不是很有经验。你有什么建议?你能解释一下你说的让它成为守护进程是什么意思吗?那是什么?我对他们不是很有经验,只是因为我需要他们。但这是一个后台过程,不与任何终端或直接用户交互相关联
    python program.py stop
    python program.py start
    python program.py restart