I screwed up with git and managed to delete the code I had just written... but it was still running in a process in a docker container. Here's how I got it back, using https://pypi.python.org/pypi/pyrasite/ and https://pypi.python.org/pypi/uncompyle6
= Attach a shell to the docker container
-
Install GDB (needed by pyrasite)
apt-get update && apt-get install gdb
-
Install pyrasite - this well let you attach a Python shell to the still-running process.
pip install pyrasite
-
Install uncompyle6, which will let you get Python source code back from in-memory code objects:
pip install uncompyle6
-
Find the PID of the process that is still running
ps aux | grep python
-
Attach an interactive prompt using pyrasite
pyrasite-shell
-
Now you're in an interactive prompt! Import the code you need to recover:
from my_package import my_module
-
Figure out which functions and classes you need to recover:
dir(my_module) ['MyClass', 'my_function']
-
Decompile the function into source code:
import uncompyle6 import sys uncompyle6.main.uncompyle( 2.7, my_module.my_function.func_code, sys.stdout )
function_body = "appears here"
-
For the class, you'll need to decompile each method in turn:
uncompyle6.main.uncompyle( 2.7, my_module.MyClass.my_method.im_func.func_code, sys.stdout )
class_method_body = "appears here"