如何在Python提示符中执行(而非导入)Python脚本?

7

我需要在已经启动的Python会话中执行一个Python脚本,就像从命令行启动一样。我考虑的方法类似于在bash或sh中执行source

2个回答

12
在Python 2中,内置函数execfile可以实现这个功能。
execfile(filename)

3
你必须热爱Python。如何在Python中执行文件:execfile。 - James Brooks
在Python 3中,它不起作用,您必须使用自己的模块,例如这样导入sysclass process(): def call(self,filename,globals=None, locals=None): import sys if globals is None: globals = sys._getframe(1).f_globals if locals is None: locals = sys._getframe(1).f_locals with open(filename, "r") as fh: exec(fh.read()+"\n", globals, locals)sys.modules[name] = process() - jamk
2
是的,在Python 3中,execfile()已经被移除了。请参考Python 3.0中execfile的替代方法是什么? - Jason Orendorff
1
用引号括起来的“文件名”。 - Gauthier
@JamesBrooks 哈哈,作为一名 Rubyist,我会说“为什么它不叫 execute_file呢!” - phillyslick

3

如果您正在运行 ipython(我强烈推荐用于交互式Python会话),您可以键入:

%run filename 

或者

%run filename.py

执行模块(而不是导入它)。您将获得文件名自动补全功能,这对于ReallyLongModuleName.py非常有用(尽管您不会像那样命名模块)。


谢谢建议,我通常使用ipython,但不幸的是,对于这个任务,我需要调试一个通过Ctypes从Python调用的C库。因此,我需要在gdb中加载Python二进制文件,运行它,导入ctypes,加载库,写下加载地址,断开到gdb,添加库符号,设置断点,继续执行Python,最后加载模块...使用ipython会增加一个额外的步骤,因为它本身不是可以直接在gdb中加载的二进制文件,而是另一个Python脚本 :-) - fortran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接