【问题标题】:clear piped output without interrupting program?在不中断程序的情况下清除管道输出?
【发布时间】:2013-07-26 16:31:30
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: bash pipe


    【解决方案1】:

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

    当输出文件被截断时,两者有很大区别。

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

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

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

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

    【讨论】:

    • 我正在测试在我的初次通话中将 > 替换为 >> 。到目前为止,它似乎已经解决了这个问题,但如果要赶上大量空白字节,我需要运行一段时间来建立滞后。暂且,谢谢!
    • 你有什么运气吗?
    猜你喜欢
    • 2011-10-24
    • 2011-04-22
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多