恢复长时间运行的python进程的文件

2024-04-20 00:52:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个长期运行的python进程,它使用

    while True:
        do_something()
        pickle.dump(var, open('file','wb'))

我删除了'文件'假设它将被重写,但该文件已永远消失。我以为每次调用open()时python都会创建一个新的文件处理程序。是否仍有恢复此文件的方法?进程仍在运行,它仍将写入“文件”。你知道吗

顺便说一下,这是一台Ubuntu机器


Tags: 文件方法true处理程序进程varopendump
1条回答
网友
1楼 · 发布于 2024-04-20 00:52:29

由于这是Linux,您应该能够做到:

1)找到Python脚本的PID

ps -ef | grep myscript.py

2)查看脚本的打开文件描述符

lsof -p <PID>

3)确定您感兴趣的文件的文件描述符-行尾可能会显示“(已删除)”

4)复制该文件

cp /proc/<PID>/fd/<filedes> /some/other/path

请注意,如果您实际上已经用完了文件描述符,那么您可以通过这种方式找到的最新副本可能非常旧,这取决于更新的频率以及脚本运行的时间。但是,总比什么都没有强。不过,如果您真的没有文件描述符,我预计open()可能会抛出异常。你知道吗

提到的另一种可能性是,可能您从未使用过pickle.dump()调用,在这种情况下,上面的方法根本没有帮助,因为没有任何要恢复的文件。。。你知道吗

相关问题 更多 >