如何在Python中获取当前脚本的代码?

时间:2015-12-28 10:29:48

标签: python self-reference

我想将当前脚本作为Python中变量的字符串。

我发现了两种次优方式,但我希望有更好的解决方案。我找到了:

  1. inspect导入有getsource方法,但只返回一个函数(或类或其他)的代码,但不返回整个脚本。我找不到将整个脚本的对象传递给getsource的方法。

  2. 我可以使用__file__sys.argv[0]open来查找脚本文件的文件位置。但这对我来说似乎太间接了。

  3. 那么:有没有(更好的)方法以字符串形式访问整个脚本?

    如果相关:我更喜欢高于3.x的Python 2.7解决方案。

1 个答案:

答案 0 :(得分:8)

尝试:

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"模块",sys.modules[__name__]返回对该模块的引用。

修改

或者,正如@ilent2建议的那样,不需要sys模块:

import inspect

print inspect.getsource(inspect.getmodule(inspect.currentframe()))