如何在网页中连续显示python输出?

Sie*_*cje 9 python jinja2 flask python-2.7

我希望能够访问一个网页,它将运行一个python函数并在网页中显示进度.

因此,当您访问该网页时,您可以看到脚本的输出,就像您从命令行运行它并在命令行中查看输出一样.

我需要在函数中做什么?

我需要在模板中做什么?

编辑:

我正在尝试使用Markus Unterwaditzer的代码和模板.

{% extends "base.html" %}
{% block content %}

{% autoescape false %}

{{word}}

{% endautoescape %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

Python代码

import flask
from flask import render_template
import subprocess
import time

app = flask.Flask(__name__)

@app.route('/yield')
def index():
    def inner():
        for x in range(1000):
            yield '%s<br/>\n' % x
            time.sleep(1)
    return render_template('simple.html', word=inner())
    #return flask.Response(inner(), mimetype='text/html')  # text/html is required for most browsers to show the partial page immediately

app.run(debug=True, port=8080)
Run Code Online (Sandbox Code Playgroud)

它运行但我在浏览器中看不到任何内容.

Mar*_*zer 14

这是一个非常简单的应用程序,使用普通HTTP流式处理进程的输出:

import flask
import time

app = flask.Flask(__name__)

@app.route('/yield')
def index():
    def inner():
        for x in range(100):
            time.sleep(1)
            yield '%s<br/>\n' % x
    return flask.Response(inner(), mimetype='text/html')  # text/html is required for most browsers to show the partial page immediately

app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)


Val*_*ris 8

我今天遇到了同样的问题,并找到了一种方法来调整Markus Unterwaditzer对模板工作的回答.

关键是使用jinja Template.generate()而不是Template.render(),烧瓶使用render_template().

import flask
import time

from jinja2 import Environment
from jinja2.loaders import FileSystemLoader

app = flask.Flask(__name__)

@app.route('/yield')
def index():
    def inner():
        for x in range(100):
            time.sleep(1)
            yield '%s<br/>\n' % x
    env = Environment(loader=FileSystemLoader('templates'))
    tmpl = env.get_template('result.html')
    return flask.Response(tmpl.generate(result=inner()))

app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

假设有一个result.html看起来像这样的模板:

{% extends "layout.html" %}
{% block body %}
<body>
  {% for line in result %}
    {{ line }}
  {% endfor %}
</body>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)