1

我正在运行一个通过管道传输到文本文件的程序(钢琴条),每秒输出一次。生成的文件(“pianobarout.txt”)需要定期清除,否则它会增长到很大的比例。但是,我不想停止钢琴条来清除文件。

我也试过运行> pianobarout.txtecho "" > pianobarout.txt但两者都会导致系统资源在近 30 秒内大幅飙升,导致钢琴栏的音频跳过。我尝试删除该文件,但似乎该文件在被删除后没有重新创建,我只是丢失了管道。

我正在使用 python,所以如果有任何库可以提供帮助,我可以使用这些库。

有任何想法吗?

4

1 回答 1

3

如果您当前正在使用截断重定向,例如yourprogram > file.txt,请尝试使用附加重定向重定向:yourprogram >> file.txt

当输出文件被截断时,两者之间存在很大差异。

通过附加重定向,数据被写入文件的当前末尾。如果将其截断为 0 字节,则下一次写入将发生在位置 0。

通过截断重定向,数据被写入文件中最后一次写入的任何位置。如果将其截断为 0 字节,则写入将在上次停止的字节 1073741824 处继续。

如果文件系统支持它(ext2-4 和大多数 Unix fs 支持),这会导致文件稀疏,或者如果文件系统不支持(如 fat32),则会在文件被写出时等待很长时间。文件后面的任何内容也可能导致长时间等待,例如tail -f必须通过读取 GB 的零来赶上。

替代方案包括yourprogram | split -b 1G - output-,它将每个写入 1GB 到output-aa,output-ab等,让您可以随意删除旧文件。

于 2013-07-26T17:15:57.050 回答