我有一个我不想终止的长时间运行的程序,但我确实想查看它的输出(大约每小时一个句子)。
我现在知道我需要刷新脚本中的输出(例如 sys.stdout.flush()),但由于我不想终止它,我希望有一些聪明的 linux 命令可以执行这个。根据我在网上阅读的内容,典型的 linux 行为是在缓冲区填满时刷新它。
如果没人知道答案,你知道这个缓冲区有多大吗?至少知道何时回来查看会很好 :)
[这是在 Ubuntu 10 上]
最佳答案
为了找出 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。在你的系统中可能是相同的,但你可以重复实验来确认。
对于 future ,请在下面找到一些可能有用的链接:
关于python - 如何刷新已经运行的 python 程序的 linux stdio-redirect-buffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860157/