2024-04-20 00:52:29 发布
网友
我有一个长期运行的python进程,它使用
while True: do_something() pickle.dump(var, open('file','wb'))
我删除了'文件'假设它将被重写,但该文件已永远消失。我以为每次调用open()时python都会创建一个新的文件处理程序。是否仍有恢复此文件的方法?进程仍在运行,它仍将写入“文件”。你知道吗
顺便说一下,这是一台Ubuntu机器
由于这是Linux,您应该能够做到:
1)找到Python脚本的PID
ps -ef | grep myscript.py
2)查看脚本的打开文件描述符
lsof -p <PID>
3)确定您感兴趣的文件的文件描述符-行尾可能会显示“(已删除)”
4)复制该文件
cp /proc/<PID>/fd/<filedes> /some/other/path
请注意,如果您实际上已经用完了文件描述符,那么您可以通过这种方式找到的最新副本可能非常旧,这取决于更新的频率以及脚本运行的时间。但是,总比什么都没有强。不过,如果您真的没有文件描述符,我预计open()可能会抛出异常。你知道吗
open()
提到的另一种可能性是,可能您从未使用过pickle.dump()调用,在这种情况下,上面的方法根本没有帮助,因为没有任何要恢复的文件。。。你知道吗
pickle.dump()
由于这是Linux,您应该能够做到:
1)找到Python脚本的PID
2)查看脚本的打开文件描述符
3)确定您感兴趣的文件的文件描述符-行尾可能会显示“(已删除)”
4)复制该文件
请注意,如果您实际上已经用完了文件描述符,那么您可以通过这种方式找到的最新副本可能非常旧,这取决于更新的频率以及脚本运行的时间。但是,总比什么都没有强。不过,如果您真的没有文件描述符,我预计
open()
可能会抛出异常。你知道吗提到的另一种可能性是,可能您从未使用过
pickle.dump()
调用,在这种情况下,上面的方法根本没有帮助,因为没有任何要恢复的文件。。。你知道吗相关问题 更多 >
编程相关推荐