我正在使用flask进行开发,而不是生产,我有一个ajax请求的视图,如下所示:
@application.route('/xyz/<var>/', methods=['GET'])
def getAjax(var):
...
return render_template(...)
Run Code Online (Sandbox Code Playgroud)
我也threaded=true用于开发.每当我调用那个ajax请求然后只是关闭请求它的选项卡时,我会收到一个错误:
Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 651, in __init__ 2015-07-07 09:46:09,430 127.0.0.1 - - [07/Jul/2015 09:46:09] "GET /xyz/List/ HTTP/1.1" 200 -
self.finish() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 279, in close
self.flush() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)
我可以有一个try: …
情况如下:
我有一个应用程序,前端使用 Angularjs,后端使用 Flask。
我有一条看起来像这样的路线:
@app.route('/api/route1', methods=['POST'])
def route1():
result = some_package.long_task()
result2 = some_package.short_task(result)
return jsonify(result)
Run Code Online (Sandbox Code Playgroud)
该long_task函数正在执行一些 bash 命令,使用check_output,使用数据库,读写文件等。可能需要几个小时才能完成。
假设用户厌倦了等待并在进程开始 10 分钟后关闭浏览器窗口。
我的问题是:
long_task并short_task要被执行的?非常感谢你的回答。
从s3 Bucket下载文件到用户计算机.
我正在为React应用程序开发Python/Flask API.当用户单击前端的"下载"按钮时,我想将相应的文件下载到他们的计算机上.
import boto3
s3 = boto3.resource('s3')
s3.Bucket('mybucket').download_file('hello.txt', '/tmp/hello.txt')
我目前正在使用一些代码来查找downloads文件夹的路径,然后将该路径作为第二个参数插入download_file(),以及他们尝试下载的存储桶上的文件.
这在本地工作,测试运行正常,但一旦部署,我遇到了问题.代码将找到SERVER的下载路径,并在那里下载文件.
解决这个问题的最佳方法是什么?我已经研究过,无法找到一个很好的解决方案,可以将文件从s3存储桶下载到用户下载文件夹.非常感谢任何帮助/建议.
python api operating-system amazon-s3 web-development-server
在这篇文章之后,我可以将tail -f日志文件发送到网页:
from gevent import sleep
from gevent.wsgi import WSGIServer
import flask
import subprocess
app = flask.Flask(__name__)
@app.route('/yield')
def index():
def inner():
proc = subprocess.Popen(
['tail -f ./log'],
shell=True,
stdout=subprocess.PIPE
)
for line in iter(proc.stdout.readline,''):
sleep(0.1)
yield line.rstrip() + '<br/>\n'
return flask.Response(inner(), mimetype='text/html')
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
这种方法有两个问题。
tail -f log关闭网页后,该过程将持续存在。访问http://localhost:5000/yield n 次后会有 n 个 tail 进程我的问题是,是否可以让flask在有人访问页面时执行shell命令,并在客户端关闭页面时终止该命令?就像Ctrl+C之后tail -f log。如果没有,还有哪些替代方案?为什么我一次只能有 1 个客户端访问该页面?
注意:我正在研究启动/停止任意 shell 命令的一般方法,而不是特别尾随文件