2013-07-26 20 views
1

我正在運行一個程序(pianobar)管道到一個文本文件,每秒鐘輸出。生成的文件(「pianobarout.txt」)需要定期清除,或者增長到很大的比例。但是,我不想停止Pianobar來清除文件。清除管道輸出而不中斷程序?

我試過運行> pianobarout.txt以及echo "" > pianobarout.txt,但都導致系統的資源猛增了近30秒,導致來自pianobar的音頻跳過。我嘗試刪除該文件,但似乎該文件在刪除後不會被重新創建,而我只是丟失了該管道。

我正在從python工作,所以如果有任何庫可以幫助,那些對我來說是可用的。

任何想法?

回答

3

如果您當前正在使用截斷重定向,例如yourprogram > file.txt,請嘗試重定向並附加:yourprogram >> file.txt

當輸出文件被截斷時,兩者之間存在很大差異。

通過附加重定向,數據被寫入文件的當前末尾。如果將它截斷爲0字節,則下一次寫入將發生在位置0處。

在截斷重定向時,數據將寫入文件中最後一次寫入停止的位置。如果將它截斷爲0字節,寫入操作將繼續保留在字節1073741824處。

如果文件系統支持它(ext2-4和大多數Unix fs),則會產生一個稀疏文件,或者在文件寫出時(如fat32)等待很長時間。等待很長時間也可能由文件後面的任何內容引起,如tail -f,它必須通過讀取一個零的GB來趕上。

替代方案包括yourprogram | split -b 1G - output-,它將分別向output-aa,output-ab等寫入1GB,讓您可以在您的帳戶中刪除舊文件。

+0

我在首次調用中正在測試替換> with >>。到目前爲止,它似乎正在處理這個問題,但如果它是追趕大量空白字節的話,我需要運行一段時間來增加滯後時間。暫時地,謝謝! –

+0

你有沒有這個運氣? –