2012-12-12 63 views
0

我有一個腳本,使許多(數十萬)的文件,我想這樣是這樣的:長時間任務之前Python打印不能工作?

from __future__ import print_function 

print("Generating...", end = "") 
doStuff() 
print(" Done") 

因爲end = ""的,我期望Generating...長期任務之前露面,並在完成後更改爲Generating... Done。然而,第一print()不會立即在第二print()之前顯示,直到doStuff()完成後,。 doStuff()之前的time.sleep(1)不做任何事,儘管它不會是一個永久的解決方案。

回答

1

您需要定期沖洗sys.stdout的字符顯示出來:

import sys 

print 'Working', 

while working(): 
    work() 

    print '.', 

    sys.stdout.flush() 

print 'Done' 
+0

工作就像一個魅力,我只是說'sys.stdout.flush()'doStuff前'()'。看起來像Python是語言的類型不會有這種問題,但完美的作品。 – tkbx

+0

@tkbx:它可能取決於你的平臺(和終端模擬器?)。我必須在Linux下這樣做,但Windows似乎沒有這個問題。 – Blender

+0

我在使用Mac在bash默認的模擬器,還沒有測試任何其他操作系統,但(但我將使用這個Linux上的主要) – tkbx

0

很可能你的解釋器,緩衝輸出。運行「python -u yourfile.py」應該可以解決這個問題。

+0

我運行它作爲一個可執行文件(./script),它不是一個真正的永久解決方案... – tkbx

+0

OK,我想你的shell會調用Python解釋器來解釋你的腳本(可能由認領所示),這至少是我的。對於一般無緩衝輸出http://stackoverflow.com/questions/881696/unbuffered-stdout-in-python-as-in-python-u-from-within-the-program等。 – Hyperboreus

+0

或也http://stackoverflow.com/questions/107705/python-output-buffering – Hyperboreus