2012-01-14 40 views
2

我得到了一個我不想殺的長時間運行的程序,但我確實希望看到它的輸出(每個小時左右一個句子)。如何刷新已運行的python程序的linux stdio-redirect-buffer?

我現在知道我需要刷新腳本中的輸出(例如sys.stdout.flush()),但由於我不想殺死它,我希望有一些聰明的linux命令來做這個。從我在線閱讀的內容來看,典型的linux行爲是在緩衝區填滿時清除它。

如果沒有人知道答案,你是否知道這個緩衝區有多大?這將是不錯的,至少得到何時回來看看:)

的想法[這是在Ubuntu 10]

+1

通常情況下,緩衝區爲4096個或8192字節。沒有'ptrace',沒有殺死它就沒有多少事可做。 – Dave 2012-01-14 04:48:09

回答

1

要找出緩衝區大小sys.stdout在Ubuntu 11.10我用下面簡單的程序:

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.在您的系統中可能是相同的,但您可以重複實驗來確認。

對於未來,請在下面找到一些鏈接,可以幫助: