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() ?