0
我是python新手。我有一個單獨的燒瓶web應用程序,實時讀取'log.txt'文件(通過AJAX) 預期結果是它顯示「消息1」,5秒後顯示「消息2」。然後,我有以下腳本寫入文件:Python(Flask)沒有正確關閉文件?
當我做一個獨立的Python腳本下面的工作(我看到的第一個消息,5秒後,第二個消息):
f = sys.stdout = sys.stderr = open('static/staging/stdout/discovery.log', 'w')
print "Message 1"
f.close()
time.sleep(5)
f = sys.stdout = sys.stderr = open('static/log.txt', 'a')
print "Message 2"
f.close()
time.sleep(5)
當我把它作爲Web應用程序的一部分,並且函數Is Call如下所示,它們都在10秒後出現而不是一個接一個。
@app.route('/mywriter/')
def myApp():
f = sys.stdout = sys.stderr = open('static/log.txt', 'w')
print "Message 1"
f.close()
time.sleep(5)
f = sys.stdout = sys.stderr = open('static/log.txt', 'a')
print "Message 2」
f.close()
time.sleep(5)
我必須在這個階段,我用flush()
和fsync()
但是從我瞭解做f.close()
會做這兩種反正指出。除此之外,當我把它作爲一個獨立的腳本使用時,它卻起作用,但是當我把它作爲一個web應用程序的一部分加入到一個方法中時,它就沒有用。
你爲什麼要覆蓋'stdout/stderr'?在sooooo的許多層面上這是如此錯誤。只要做適當的'f.write'而不是打印。無論如何,這似乎與內部緩衝(可以從代碼外部操縱)有關。嘗試在每次寫入後插入'f.flush()'行。 – freakish
我正在指導stdout&stderr,它按預期工作。我已經提到我已經使用過'f.flush()',但是我沒有使用f.close(),因爲它調用了 – Macbook
中的f.flush方法,你正在搞亂一個最重要的全局變量。不要。副作用很難想象。無論如何,我不能再現你的問題。你如何監控文件? – freakish