I want to get the current script as a string in a variable in Python.
I found two sub-optimal ways, but I hope there is a better solution. I found:
The inspect
import has a getsource
method, but that only returns the code of one function (or class or whatever), but not the entire script. I can't find a way to pass the object of the entire script to getsource
.
I could find the file location of the script file using __file__
or sys.argv[0]
and open
it to read. But this seems too indirect to me.
So: is there a (better) way to access the entire script as a string?
If relevant: I'd prefer a Python 2.7 solution above a 3.x.
Try:
import inspect
import sys
print inspect.getsource(sys.modules[__name__])
Or even:
import inspect
import sys
lines = inspect.getsourcelines(sys.modules[__name__])[0]
for index, line in enumerate(lines):
print "{:4d} {}".format(index + 1, line)
The file the code is contained inside is considered to be a Python "module", and sys.modules[__name__]
returns a reference to this module.
Edit
Or even, as @ilent2 suggested, like this, without the need of the sys
module:
import inspect
print inspect.getsource(inspect.getmodule(inspect.currentframe()))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With