在没有file.close()语句的情况下,如何在运行python进程时刷新文件写入缓冲区



我有一个文件正在后台Python 3.5进程中写入。这个文件是在这个过程中打开的(基本上是一个正在运行的Python脚本),但我忘记了在该脚本中偶尔包含一个文件关闭语句来清空缓冲区。除非手动结束,否则脚本是无限的,我(现在)知道杀死python进程会导致缓冲区中的所有数据丢失。是否有任何方法可以恢复要在这个已经运行的进程中写入的数据?

根据文档

首先执行f.flush(),然后执行os.fsync(f.fileno()),以确保所有与f相关联的内部缓冲区都写入磁盘。

这里有一个例子,

import os
with open("filename", "w") as f:
while True:  # infinite program
f.write("the text")
f.flush()
os.fsync(f.fileno())

1)获取python进程的PID

pgrep python

2) 列出文件描述符

ls -l /proc/{PID}/fd

3) 打开gdb

$ gdb
(gdb) attach {PID}
(gdb) call fflush({FILE_DESCRIPTOR})
(gdb) detach

4) 检查您的文件

最新更新