微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回文件列表的 Python 烧瓶应用

如何解决返回文件列表的 Python 烧瓶应用

我有一个基本的 Flask 应用程序,用于从 Pod 获取日志。我想在查询未完成时使用 send_from_directory。我不想创建 zip 文件并列出它,而是想列出查询生成的日志文件

from flask import Flask,send_from_directory
from flask import request
import http.server
import socketserver
import subprocess
import os
import sys
from urllib.parse import urlparse
from urllib.parse import parse_qs

app = Flask(__name__)
# write route for a namespace completely
@app.route('/logs')
def hello_world():
umgebung = request.args.get('umgebung',None)
product = request.args.get('product',None)
product_type = request.args.get('product_type',None)
output = (subprocess.check_output(['cmd','/c',f'oc logs --tail=-1 -n awl-{umgebung} -l product={product},type={product_type}'])).decode();
if not output:
    output_as = (subprocess.check_output(['cmd',type=as'])).decode();
    output_db = (subprocess.check_output(['cmd',type=db'])).decode();
    output_as_file = open ("logs/output_as_log.log","w")
    output_db_file = open ("logs/output_db_log.log","w")
    output_as_file.write(output_as)
    output_db_file.write(output_db)
    path= 'logs'
    return send_from_directory(path,output_as_file,as_attachment=True) #HERE I DO NOT UNDERSTNAD WHAT SHOUDL  BE GIVEN       
output = "<br />".join(output.split("\n"))   
return output

我正在项目文件夹内的日志文件夹下创建日志文件。如何显示文件log 中的所有文件?这样就可以一键下载?

澄清投票结束!!

应用程序应返回特定文件夹中的文件。但是 send_fron_directory 没有按预期工作。

解决方法

您可以使用 os.listdirglob.globpathlib library 列出所有文件。然后可以在模板中输出结果。
然后添加一个新路由,该路由将文件名作为参数,并通过 send_from_directory 从文件夹中传送文件。您可以将文件名作为 rule 中的路径传递。
就我对你的理解,下面的例子应该可以满足你的要求。

import os
from flask import Flask,render_template,send_from_directory

app = Flask(__name__)

@app.route('/logs/')
def logs():
    filenames = os.listdir('logs')
    return render_template('logs.html',files=filenames)

@app.route('/logs/<path:filename>')
def log(filename):
    return send_from_directory(
        os.path.abspath('logs'),filename,as_attachment=True
    )

应在应用程序目录中的 templates/logs.html 下添加以下模板。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Logfiles</title>
  </head>
  <body>
    <ul>
    {% for file in files %}
        <li><a href="{{ url_for('log',filename=file) }}">{{ file }}</a></li>
    {% endfor %}
    </ul>
  </body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。