Python 从命令行/GUI控制flask服务器

Python 从命令行/GUI控制flask服务器,python,flask,multiprocessing,Python,Flask,Multiprocessing,首先:我试图编写GUI来控制Flask simple server,这样我就可以将我的应用程序分发给noobs(使用PyInstaller) 我使用多处理启动烧瓶,然后将其关闭,但关闭它似乎是个问题。我编写了简单的cli控制器作为概念证明,但它甚至忽略了sys.exit() 代码: 但结果让我大吃一惊: (表示我按了回车键) user@localhost:~$/run.py 输入内容:*正在运行http://127.0.0.1:5000/ *使用重新加载程序重新启动 输入某物:x 没有一个 到此

首先:我试图编写GUI来控制Flask simple server,这样我就可以将我的应用程序分发给noobs(使用PyInstaller)

我使用多处理启动烧瓶,然后将其关闭,但关闭它似乎是个问题。我编写了简单的cli控制器作为概念证明,但它甚至忽略了sys.exit()

代码:

但结果让我大吃一惊: (表示我按了回车键)

user@localhost:~$/run.py
输入内容:*正在运行http://127.0.0.1:5000/
*使用重新加载程序重新启动
输入某物:x
没有一个
到此为止
全部完成!
user@localhost:~$Traceback(最近一次呼叫上次):
文件“/run.py”,第42行,在
x=原始输入(“输入某物:”)
伊奥费罗
烧瓶还在运转

  • 我尝试在terminate()之后添加
    server.join(),但Flask仍在运行
  • 我在没有Flask的情况下实现了同样的功能(而是两个无限循环),它可以工作
  • 我尝试在
    if\uuuu name\uuuuu==“\uuuu main\uuu:”
    中包装从
    server=…
    break
    的所有内容,但没有结果

  • 我错过了什么

    我仍然不明白为什么以前的版本不起作用,但我找到了这个解决方案:

    from Tkinter import *
    from ttk import *
    import multiprocessing
    from myapp import app
    
    def make_ui(server):
        def terminate_server():
                if server is not None and server.is_alive():
                    server.terminate()
                main.destroy()
    
        def toggle_server():
            global server
            if server.is_alive():
                server.terminate()
                server.join()
            else:
                if server.exitcode:
                    server = multiprocessing.Process(target=run_in_behind, name="server")
                server.start()
    
        main = Tk()
        appname = Label(main, text="Sociometry v.0.0.1", anchor="center")
        appname.grid(row=0, column=0, columnspan=2, pady=2)
        main.mainloop()
    
    
    
    def run_in_behind():
        config = {
            "HOST": "127.0.0.1"
        }
        app.config.from_object(config)
        app.run()
    
    if __name__ == "__main__":
        server = multiprocessing.Process(target=run_in_behind, name="server")
        make_ui(server)
    
    user@localhost:~$ ./run.py 
    Input something: * Running on http://127.0.0.1:5000/
     * Restarting with reloader
    Input something:x
    None
    end here
    All done!
    user@localhost:~$ <Enter> Traceback (most recent call last):
      File "./run.py", line 42, in <module>
        x = raw_input("Input something:")
    EOFError
    
    from Tkinter import *
    from ttk import *
    import multiprocessing
    from myapp import app
    
    def make_ui(server):
        def terminate_server():
                if server is not None and server.is_alive():
                    server.terminate()
                main.destroy()
    
        def toggle_server():
            global server
            if server.is_alive():
                server.terminate()
                server.join()
            else:
                if server.exitcode:
                    server = multiprocessing.Process(target=run_in_behind, name="server")
                server.start()
    
        main = Tk()
        appname = Label(main, text="Sociometry v.0.0.1", anchor="center")
        appname.grid(row=0, column=0, columnspan=2, pady=2)
        main.mainloop()
    
    
    
    def run_in_behind():
        config = {
            "HOST": "127.0.0.1"
        }
        app.config.from_object(config)
        app.run()
    
    if __name__ == "__main__":
        server = multiprocessing.Process(target=run_in_behind, name="server")
        make_ui(server)