问题
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 agetsource
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 togetsource
.I could find the file location of the script file using
__file__
orsys.argv[0]
andopen
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.
回答1:
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()))
来源:https://stackoverflow.com/questions/34491808/how-to-get-the-current-scripts-code-in-python