gpt4 book ai didi

Python 执行和 __name__

转载 作者:太空狗 更新时间:2023-10-30 01:16:10 25 4
gpt4 key购买 nike

当我运行时:

exec("print(__name__)")

它打印__main__

但是当我运行时:

exec("print __name__", {})

它打印builtins

如何让第二个例子也打印__main__

我试图实现的是使用 exec() 运行一段代码,以便从它的角度来看它看起来像是从命令行运行的。

我想用干净的范围调整代码,但第二个示例破坏了依赖于 if __name__ == "__main__" 的代码。如何解决这个问题?

最佳答案

你可以使用 imp.load_module相反:

import imp

with open(mainfile) as src:
imp.load_module('__main__', src, mainfile, (".py", "r", imp.PY_SOURCE))

这会将文件导入为 __main__ 模块,并执行它。

请注意,当类型设置为 imp.PY_SOURCE 时,它需要一个实际的文件对象,因此如果您的源代码来自其他地方,您需要创建一个临时文件才能工作而不是一个文件。

否则,总是可以手动设置__name__:

>>> src = '''\
... if __name__ == '__main__': print('Main!')
... else: print('Damn', __name__)
... '''
>>> exec(src)
Main!
>>> exec(src, {})
Damn builtins
>>> exec(src, {'__name__':'__main__'})
Main!

关于Python 执行和 __name__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15740932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com