【发布时间】:2013-08-20 02:19:30
【问题描述】:
是否可以(不必使用 python 自省)打印脚本的源代码?
我想执行一个简短的 python 脚本,它也打印它的源代码(这样我就可以看到执行了哪些命令)。
脚本是这样的:
command1()
#command2()
command3()
print some_variable_that_contain_src
真正的应用是我想使用run -i 魔法从 IPython 运行一个脚本,并将源(即执行的命令)作为输出。通过这种方式,我可以检查每次执行时注释了哪些命令。此外,如果在笔记本中执行,我会留下使用过哪些命令的痕迹。
解决方案
使用 korylprince 解决方案,我最终将这个单行代码放在脚本的开头:
with open(__file__) as f: print '\n'.join(f.read().split('\n')[1:])
这将打印除第一行之外的脚本源(那只是噪音)。修改切片以打印脚本的不同“切片”也很容易。
如果您想打印整个文件,单行简化为:
with open(__file__) as f: print f.read()
【问题讨论】:
-
也许可以查看 python 中的检查包:python.org/doc//current/library/inspect.html。特别是
getsource方法 -
这类程序称为Quine程序。 en.wikipedia.org/wiki/Quine_(computing)我正在尝试自己用python写一个,太难了。 :(
-
为什么要去掉第一行?您会得到一个脚本,该脚本在运行时会打印出不包含任何有关打印其源代码的任何内容的源代码。这很令人困惑。第一行不是噪音,正如 cmets 或断言是噪音一样。
-
@user2357112:这是抽象正交性与实际便利性的问题。我只想对某些数据分析中使用的命令有视觉反馈。我丢弃了所有不感兴趣的部分以获得更清晰的输出。
标签: python