python - 在另一个进程正在写入时清空文件

标签 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程序不断向文件写入数据,文件大小仍然保持不变。

如何解决这个问题?

最佳答案

您应该以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)

然后当这段代码运行时你可以做:

> data

从您的 shell 随时将文件截断为 0 字节不会通过文件搜索添加空字节

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

关于python - 在另一个进程正在写入时清空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472926/

相关文章:

python - 如何在 django 的另一个模型保存方法中更新模型实例?

python - 扩展 Python 和 Objective-C

linux - 如果行长于 x 个字符,则剪切并添加字符串

linux - 在 Shell 脚本中传递 'If statement' 问题

linux - 忽略多个可能值的 Case 语句

Python 字典优化

python - 如何在 matplotlib 中使用 Font Awesome 符号作为标记

linux - 从 shell 脚本获取随机数并使用 snmpcommad(SNMP 协议(protocol))将其存储到文件中

c++ - 使用环境变量 C++ 在 Linux 上用 C++ 启动进程

linux - 如何使用 shell 脚本将用户名和密码传递给应用程序?