Python - Flask - 在默认浏览器

时间:2017-07-03 00:52:32

标签: python flask

以下代码是给出here答案的变体。 请求两个webbrowser.open(),并且它们在时间上略有间隔。

两个网页都可以正常呈现,但两者都显示第二个(Chris)参数。

为什么Pat没有受到欢迎?

import random, threading, webbrowser
from flask import Flask, render_template_string

app = Flask(__name__)


@app.route('/<name>')
def index(name):
    return render_template_string('''<h3>Hello, {{ name }}!</h3>''', name=name)


if __name__ == '__main__':
    names = ['Pat', 'Chris']
    port = 5000 + random.randint(0, 999)
    wait = 1.25
    for name in names:
        url = "http://127.0.0.1:{0}/{1}".format(port, name)
        threading.Timer(wait, lambda: webbrowser.open(url)).start()
        wait += 0.5
    app.run(port=port, debug=False)

1 个答案:

答案 0 :(得分:0)

在循环中定义回调函数是问题,它被称为后期绑定。两个lambdas最终都会看到url的最后一个值。将lambda替换为:

functools.partial(webbrowser.open, url)

或废弃计时器,并在循环中仅time.sleep(0.5)