如何刷新正在运行的Python程序的Linux标准输入输出重定向缓冲区?
我有一个运行很久的程序,不想把它杀掉,但我想看看它的输出(大概每小时输出一句话)。
我现在知道我需要在我的脚本里刷新输出(比如用 sys.stdout.flush()),但因为我不想结束这个程序,所以我希望能找到一些聪明的 Linux 命令来做到这一点。根据我在网上看到的,Linux 的一般行为是当缓存满了的时候才会刷新。
如果没有人知道答案,你知道这个缓存大概有多大吗?至少能让我知道什么时候去看看会比较好 :)
[这是在 Ubuntu 10 上的情况]
1 个回答
1
为了找出在Ubuntu 11.10中sys.stdout
的缓冲区大小,我写了一个简单的程序:
import sys, time
buf_size = 1024
for counter in xrange(buf_size):
sys.stdout.write('a')
time.sleep(3)
实验过程如下:
- 如果
buf_size
设置得太大,部分字符串会立刻显示在控制台上,而剩下的部分则会在三秒后显示。 - 如果
buf_size
设置得太小,所有的输出会在三秒后一起显示。
在我的情况下,当缓冲区大小设置为1024时,程序结束之前我什么都看不到,但当我把它设置为1025时,我能看到很多字符,并且在三秒后又多打印了一个字符。
因此,我的系统中的缓冲区大小是1024。你的系统可能也是这样,但你可以重复这个实验来确认一下。
为了将来方便,下面有一些可能有用的链接: