python print function in real time

回眸只為那壹抹淺笑 提交于 2020-01-19 05:41:07

问题


I recently switched OS and am using a newer Python (2.7). On my old system, I used to be able to print instantaneously. For instance, suppose I had a computationally intense for loop:

for i in range(10):
  huge calculation
  print i

then as the code completed each iteration, it would print i

However, on my current system, python seems to cache the stdout so that the terminal is blank for several minutes, after which it prints:

1
2
3

in short succession. Then, after a few more minutes, it prints:

4
5
6

and so on. How can I make python print as soon as it reaches the print statement?


回答1:


Try to call flush of stdout after the print

import sys

...
sys.stdout.flush()

Or use a command line option -u which:

Force stdin, stdout and stderr to be totally unbuffered.




回答2:


Since Python 3.3, you can simply pass flush=True to the print function.




回答3:


Import the new print-as-function as in Python 3.x:

from __future__ import print_function

(put the statement at the top of your script/module)

This allows you to replace the new print function with your own:

def print(s, end='\n', file=sys.stdout):
    file.write(s + end)
    file.flush()

The advantage is that this way your script will work just the same when you upgrade one day to Python 3.x.

Ps1: I did not try it out, but the print-as-function might just flush by default.

PS2: you might also be interested in my progressbar example.



来源:https://stackoverflow.com/questions/7463878/python-print-function-in-real-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!