我想使用Flask 作为巨 Python 脚本的一部分.我想执行一些命令,然后运行FlaskTM服务器发送文件,并在10秒或更长时间后关闭服务器并继续运行脚本.
在执行Shut_Down函数后,出现一个错误,直到我在终端按下ctrl-c,REST脚本才会执行.以下是我的代码
from flask import send_from_directory, abort
from flask import Flask
import socket
from flask import request
from flask_apscheduler import APScheduler
hostName= socket.gethostname()
ipAddr= socket.gethostbyname(hostName)
app= Flask(__name__)
app.config["CLIENT_IMAGES"]="photo"
socketio = SocketIO(app)
sched=APScheduler()
counter=0
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route("/")
def index():
return "Hello World"
@app.route("/get-image/<string:image_name>")
def get_image(image_name):
try:
return send_from_directory(app.config["CLIENT_IMAGES"], "photo.jpg", as_attachment=True)
except FileNotFoundError:
abort(404)
if __name__=="__main__":
sched.add_job(id='Job1',func=shutdown_server, trigger='interval', seconds=5)
sched.start()
#app.run()
#socketio.run(app,host="0.0.0.0", port=4998,allow_unsafe_werkzeug=True)
app.run(host=ipAddr, port='5000',debug= False) #,use_reloader=False
#os.system("start /b python app.py")
#os.system("python "+ "app.py &" )
counter+=1
print("ALohaaa")
以下是错误:
Job "Job1 (trigger: interval[0:00:05], next run at: 2023-10-09 09:59:57 EEST)" raised an exception
Traceback (most recent call last):
File "C:\Users\userName\anaconda3\Lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\users\ userName \desktop\jetson\camera test\mix\qr prog test\try03.py", line 21, in shutdown_server
func = request.environ.get('werkzeug.server.shutdown')
^^^^^^^^^^^^^^^
File "C:\Users\ userName \anaconda3\Lib\site-packages\werkzeug\local.py", line 311, in __get__
obj = instance._get_current_object()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ userName \anaconda3\Lib\site-packages\werkzeug\local.py", line 508, in _get_current_object
raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of request context.
This typically means that you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.