2012-08-15 74 views
2

以下示例Python程序将打印更新进度栏。如何阻止GNU缓冲Python输出?

progress.py :

import sys 
import time 

for i in range(100): 
    sys.stdout.write("\r%3d%%" % (i + 1)) 
    sys.stdout.flush() 
    time.sleep(.02) 
sys.stdout.write("\n") 

然而,通过GNU运行它时进行(从猛砸在Ubuntu)与下面的Makefile,则输出进行缓冲,直到遇到换行符,所以进度更新不可见。无疑,无缓冲输出被指定给Python。

all : 
    python -u progress.py 

有没有什么办法让分线输出在使用make时立即可见?

+0

我刚刚测试过你的例子,它对我来说非常合适。我正在使用Ubuntu 12.04并在gnome-terminal下测试您的示例。 – user1202136 2012-08-15 10:44:18

+0

@ user1202136,我也是12.04,在程序完成之前我没有看到任何输出。我使用的是GNU Bash 4.2.24和GNU Make 3.81。如果这对你来说完全一样,我不知道有什么区别。 – 2012-08-15 10:49:40

+0

也适合我。在Linux Mint 13上运行的相同版本的Bash和Make(实际上是Ubuntu 12.04)。 – 2012-08-15 12:06:49

回答

2

我最终将其跟踪到make,在我们的/etc/bash.bashrc中与colormake混淆。

> type make 
make is aliased to `colormake' 

看来colormake缓冲区输出。据推测,它需要在着色之前解析整行。

该固定通过将:

unalias make 

~/.bashrc

> type make 
make is /usr/bin/make