如何获取Python中当前脚本的代码?
How to get the current script's code in Python?
我想将当前脚本作为字符串获取到 Python 中的变量中。
我找到了两个次优的方法,但我希望有更好的解决方案。我发现:
inspect
导入有一个 getsource
方法,但只有 returns 一个函数的代码(或 class 或其他),但不是整个脚本。我找不到将整个脚本的对象传递给 getsource
.
的方法
我可以使用 __file__
或 sys.argv[0]
和 open
找到脚本文件的文件位置以供阅读。但这对我来说似乎太间接了。
那么:有没有(更好的)方法来访问作为字符串的整个脚本?
如果相关:我更喜欢 Python 2.7 解决方案,而不是 3.x。
尝试:
import inspect
import sys
print inspect.getsource(sys.modules[__name__])
甚至:
import inspect
import sys
lines = inspect.getsourcelines(sys.modules[__name__])[0]
for index, line in enumerate(lines):
print "{:4d} {}".format(index + 1, line)
包含代码的文件被认为是 Python "module" 和 sys.modules[__name__]
returns 对该模块的引用。
编辑
或者甚至像 @ilent2 建议的那样,不需要 sys
模块:
import inspect
print inspect.getsource(inspect.getmodule(inspect.currentframe()))
我想将当前脚本作为字符串获取到 Python 中的变量中。
我找到了两个次优的方法,但我希望有更好的解决方案。我发现:
inspect
导入有一个getsource
方法,但只有 returns 一个函数的代码(或 class 或其他),但不是整个脚本。我找不到将整个脚本的对象传递给getsource
. 的方法
我可以使用
__file__
或sys.argv[0]
和open
找到脚本文件的文件位置以供阅读。但这对我来说似乎太间接了。
那么:有没有(更好的)方法来访问作为字符串的整个脚本?
如果相关:我更喜欢 Python 2.7 解决方案,而不是 3.x。
尝试:
import inspect
import sys
print inspect.getsource(sys.modules[__name__])
甚至:
import inspect
import sys
lines = inspect.getsourcelines(sys.modules[__name__])[0]
for index, line in enumerate(lines):
print "{:4d} {}".format(index + 1, line)
包含代码的文件被认为是 Python "module" 和 sys.modules[__name__]
returns 对该模块的引用。
编辑
或者甚至像 @ilent2 建议的那样,不需要 sys
模块:
import inspect
print inspect.getsource(inspect.getmodule(inspect.currentframe()))