1

毎秒出力するテキスト ファイルにパイプされたプログラム (ピアノバー) を実行しています。結果のファイル ("pianobarout.txt") は、定期的に消去する必要があります。ただし、ファイルをクリアするためにピアノバーを停止したくありません。

> pianobarout.txtと同様に実行してみましecho "" > 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 のゼロを読み取って追いつく必要がある可能性があります。

代替手段には、 、 などにそれぞれ 1GB を書き込む が含まれyourprogram | split -b 1G - output-ており、古いファイルを自由に削除できます。output-aaoutput-ab

于 2013-07-26T17:15:57.050 に答える