我有一个文件正在后台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) 检查您的文件