Python Flask脚本在作为.pyw文件运行时自动关闭(包括解决方法) 问题

Python Flask脚本在作为.pyw文件运行时自动关闭(包括解决方法) 问题,python,python-3.x,flask,Python,Python 3.x,Flask,我创建了一个基本的python脚本,使用flask呈现HTML页面。在Windows 10上,脚本可以作为*.py文件完美运行,但当作为*.pyw文件运行时,页面不会呈现 在任务管理器中,python实例在以*.pyw的形式运行脚本后几秒钟内打开和关闭 代码 变通办法 运行*.py版本,代码中添加以下行: import ctypes ... ... ... if __name__ == '__main__': cytypes.windll.user32.ShowWindow(ctypes

我创建了一个基本的python脚本,使用flask呈现HTML页面。在Windows 10上,脚本可以作为*.py文件完美运行,但当作为*.pyw文件运行时,页面不会呈现

在任务管理器中,python实例在以*.pyw的形式运行脚本后几秒钟内打开和关闭


代码
变通办法 运行*.py版本,代码中添加以下行:

import ctypes
...
...
...
if __name__ == '__main__':
  cytypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
  app.run(debug=True, host="0.0.0.0", port=80)
上面的代码隐藏控制台,并成功启动flask应用程序



但是,如果有人有想法的话,我仍然对解释为什么*.pyw方法不起作用感兴趣。

.pyw文件将在
pythonw.exe
上运行,而不是
python.exe
。区别在于,
pythonw.exe
默认情况下不会在控制台中运行,而是异步运行。这意味着flask将在后台启动并运行,直到所有其他内容终止。由于您不希望应用程序中有任何其他内容,因此程序将直接结束。

什么是“直到其他内容终止”flask在run方法中有一个无限循环,因此它本身正在运行。为什么退出?您的flask服务器在另一个线程中运行(异步)。主线程调用run方法并直接跳到下一行。因为没有别的事可做,整个程序结束了。python.exe将等待,直到所有线程终止。
import ctypes
...
...
...
if __name__ == '__main__':
  cytypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
  app.run(debug=True, host="0.0.0.0", port=80)