python: how to get the source from a code object?

decompiling, python

Solution

Without the source code, you can only approximate the code. You can disassemble the compiled bytecode with the `dis` module, then reconstruct the source code as an approximation:

>>> import dis
>>> TheString = "k=abs(x)+y"
>>> Binary = compile( TheString , "<string>" , "exec" )
>>> dis.dis(Binary)
  1           0 LOAD_NAME                0 (abs)
              3 LOAD_NAME                1 (x)
              6 CALL_FUNCTION            1
              9 LOAD_NAME                2 (y)
             12 BINARY_ADD          
             13 STORE_NAME               3 (k)
             16 LOAD_CONST               0 (None)
             19 RETURN_VALUE        

From the disassembly we can see there was 1 line, where a function named `abs()` is being called with one argument named `x`. The result is added to another name `y`, and the result is stored in `k`.

Projects like `uncompile6` (building on top of the work of many others) do just that; decompile the python bytecode and reconstruct Python code from that.

Problem

let's suppose we have a python string(not a file,a string,no files) ``` TheString = "k=abs(x)+y" ``` ok? Now we compile the string into a piece of python bytecode ``` Binary = compile( TheString , "<string>" , "exec" ) ``` now the problem: how can i get from Binary , supposing i don't know TheString , a string that represents the original string object? shortly: what is the function that is opposite to compile() ?

Original source

Related problems