【问题标题】:How can I flush the linux stdio-redirect-buffer of an already running python program?如何刷新已经运行的 python 程序的 linux stdio-redirect-buffer?
【发布时间】:2012-01-14 04:31:59
【问题描述】:

我有一个运行时间很长的程序,我不想杀死它,但我确实想看看它的输出(大约每小时一个句子)。

我现在知道我需要刷新脚本中的输出(例如 sys.stdout.flush()),但由于我不想杀死它,我希望有一些聪明的 linux 命令可以执行这。根据我在网上阅读的内容,典型的 linux 行为是在缓冲区填满时刷新它。

如果没有人知道答案,你知道这个缓冲区有多大吗?至少知道什么时候回来看看会很好:)

[这是在 Ubuntu 10 上]

【问题讨论】:

  • 通常缓冲区为 4096 或 8192 字节。没有ptrace,你可以做很多事情而不杀死它。

标签: python linux ubuntu buffering stdio


【解决方案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。在你的系统中可能是一样的,但是你可以重复实验来确认。

对于未来,请在下面找到一些有用的链接:

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2015-04-12
    • 2014-12-22
    相关资源
    最近更新 更多