如何后台运行Python Flask服务且不输出运行日志?
实现方案
第一步:修改Flask代码关闭所有默认输出
首先调整Flask相关配置,关闭框架自带的启动提示、访问日志和告警信息,修改后的代码如下:
import os import logging from flask import Flask # 屏蔽Werkzeug启动提示 os.environ['WERKZEUG_RUN_MAIN'] = 'true' # 关闭Werkzeug访问日志 werkzeug_log = logging.getLogger('werkzeug') werkzeug_log.setLevel(logging.ERROR) app = Flask(__name__) # 关闭Flask自身日志输出 app.logger.disabled = True @app.route('/', methods = ['GET']) def index(): # 此处替换为你需要触发执行的脚本逻辑 return "Hello How are you?" if __name__ == '__main__': # threaded=True开启多线程支持并行处理请求,use_reloader=False关闭重载避免重复输出 app.run(port = 5000, threaded=True, use_reloader=False, debug=False)
修改完成后运行代码就不会再出现你提到的默认输出内容。
第二步:实现后台运行+并行执行其他脚本
根据你的使用场景可以选择以下两种方案:
方案A:代码内集成并行逻辑(同进程运行)
如果要在同一个Python程序里同时跑Flask服务和其他脚本,使用多进程实现隔离,避免互相影响:
import os import logging import time from multiprocessing import Process from flask import Flask os.environ['WERKZEUG_RUN_MAIN'] = 'true' werkzeug_log = logging.getLogger('werkzeug') werkzeug_log.setLevel(logging.ERROR) app = Flask(__name__) app.logger.disabled = True @app.route('/', methods = ['GET']) def index(): return "Hello How are you?" # 此处写入你需要并行运行的其他脚本逻辑 def run_other_script(): while True: # 替换为自定义业务逻辑 time.sleep(5) if __name__ == '__main__': # 启动Flask后台子进程 flask_proc = Process(target=app.run, kwargs={ "port":5000, "threaded":True, "use_reloader":False, "debug":False }) flask_proc.daemon = True flask_proc.start() # 运行其他并行任务 run_other_script()
方案B:系统级后台启动(独立运行)
如果Flask服务和其他脚本是独立文件,直接通过终端命令后台启动Flask服务,所有输出重定向到空设备:
- Linux/macOS 终端执行:
nohup python3 你的Flask脚本文件名.py > /dev/null 2>&1 &
命令执行后会返回进程ID,需要停止服务时执行kill 进程ID即可 - Windows PowerShell 执行:
Start-Process python -ArgumentList "你的Flask脚本文件名.py" -WindowStyle Hidden
如果你需要更高稳定性的生产级部署,可以使用Gunicorn等WSGI服务器启动服务,启动时同样可以通过参数关闭所有日志输出。
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

