2017-07-03 85 views
0

以下代碼是here給出的答案的變體。 兩個webbrowser.open()被要求,他們在時間上稍微分開。Python - 燒瓶 - 在默認瀏覽器中打開兩個網頁

兩個網頁呈現正常,但都顯示第二個(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) 

回答

0

在循環中定義回調函數是個問題,它叫做後期綁定。兩個lambda最終都會看到url的最後一個值。與更換拉姆達:

functools.partial(webbrowser.open, url) 

或取消計時器,並在循環剛time.sleep(0.5)

+0

我明白了。謝謝。對於那些看到這個,然後無法在書中找到「後期裝訂」的人來說,在「關閉」下你可能會有更好的運氣。 (我特指Beazley和Lutz的YMMV。) – Calaf

相關問題