在另一个进程正在编写时清空文件

时间:2015-09-09 07:03:40

标签: python linux shell

我编写了一个python程序来连续写入文件。

#!/usr/bin/python
import sys
import time

file = open("data",'w')

i = 1
while True:
    file.write("%d\n" % i)
    file.flush()
    i+=1
    time.sleep(0.01)

过了一段时间,data文件的大小不是0。然后python写程序仍在运行。我尝试echo "" > data命令清空现有内容。 但它不起作用。一旦python程序继续将数据写入文件,文件大小仍然保持不变。

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您应该以{{1​​}}模式打开文件,并使用append删除旧内容:

truncate()

然后在运行此代码时,您可以执行以下操作:

#!/usr/bin/python
import sys
import time

file = open("data",'a')
file.truncate()

i = 1
while True:
    file.write("%d\n" % i)
    file.flush()
    i+=1
    time.sleep(0.01)
从你的shell

随时截断文件到0字节没有空字节被文件搜索添加

以附加模式打开文件(作为模式的第一个字符)会导致对此流的所有后续写入操作在文件结束时发生,从而避免将先前位置填充为空字节的情况。

答案 1 :(得分:0)

每次写入后都可以关闭文件 这将为其他编程(umount,rm,mv,du)提供处理数据的公平机会 我不确定开销,系统缓存可能对你有很多帮助。

答案 2 :(得分:0)

echo "" > data会清除文件。由于循环内的睡眠持续时间为0.01秒,因此会立即向文件添加新内容。

这在此处可见(文件中的字符数减少)

$ wc data
 4336  4335 27733 data
$ echo "" > data
$ wc data
  176   175 29848 data

如果你增加睡眠持续时间,则非常清楚

$ wc data
11 10 69 data
$ echo "" > data
$ wc data
 1 0 1 data

这在文件大小减小

中也可见
$ ls -l data
-rw-rw-r-- 1 user user 14 Sep  9 15:33 data
$ echo "" > data; ls -l data
-rw-rw-r-- 1 user user 1 Sep  9 15:33 data
相关问题