据我所知,Python并没有将源代码保存在内存中,注释中提供的方法只保留可执行文件,而不是脚本。储程序的内存可能允许您获取字节码,但我不知道这可能需要多少努力。

相反,我将首先尝试一种非特定于Python的方法,这种方法成功地用于恢复意外删除的Python源代码。这假设文件系统是ext2/3/4,并且您具有根访问权限。

第一步(在任何恢复中)显然是尽量避免在系统上写入任何文件,以免覆盖您正在查找的数据。在主系统上,如果可能的话,我可能会亲自将分区重新装载为只读,以避免再发生任何写操作。我听说其他人建议快速拔掉插头,这可能会阻止操作系统/磁盘缓存写入磁盘,如果您真的很快就可以保存一些额外的数据(甚至防止删除)。在远程系统上,这两种方法都不是一个好主意(除非数据非常重要,而且您可以将磁盘发送给您或其他人),因为如果某个东西突然变成只读的,系统可能不喜欢它。

第二步是执行debugfs /dev/sdXY,其中/dev/sdXY是已删除文件所在的分区。在提示中,说blocks /path/to/the/directory/the/removed/file/was/in。然后,给出指向目录中其他现有文件的blocks命令路径。现在,通过说quit退出程序,并希望看到的块编彼此接近。如果目录是旧的并且块编号分散,请从最近文件的块编号开始。(也就是说,最后一次修改的文件与被删除文件的最后一次修改时间尽可能接近)我们将尝试在假定文件存储在靠近它们的位置的情况下,扫描目录中其他文件附近的分区的内容。执行dd if=/dev/sdXY bs=4096 skip=BLOCKNUMBER count=COUNT |grep -C APPROXIMATE_LINE_COUNT_OF_THE_REMOVED_FILE WORD,其中BLOCKNUMBER是第一个块号之前的某个数字,COUNT是要搜索的适当块数,WORD是包含在源文件中的单词。如果你什么都没有,试着在另一个文件块附近钓鱼。如果时间不是问题,您可以考虑只在删除的文件中出现的字符串(这样您就不会得到太多的误报),您可以跳过所有这些,用grep -a WORD -C LINECOUNT /dev/sdXY扫描整个磁盘。

另一种方法(你应该先试另一种方法)可能对你不起作用,因为IIRC最新版本的Ubuntu(可能还有其他系统)在默认情况下将内核配置为阻止对/dev/mem的访问,正在尝试扫描内存中的文件。只需grep -a WORD -C LINECOUNT /dev/mem扫描内存而不是分区。(如果您在表单域中编写了长文本,并且您错误地单击,而您的浏览器清空了该域,则这也可以节省您的时间)