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

How to get the current script's code in Python?

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

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

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

  2. 的方法
  3. 我可以使用 __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()))