加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python exec和__name__

发布时间:2020-12-16 21:54:21 所属栏目:Python 来源:网络整理
导读:当我跑: exec "print __name__" 它打印__main__. 但是当我跑步时: exec "print __name__" in {} 它打印__builtin__. 如何使第二个例子也打印__main__? 我试图实现的是使用exec运行一段代码,以便从它的角度看它是从命令行运行的. 我想用干净的范围来修改代

当我跑:

exec "print __name__"

它打印__main__.

但是当我跑步时:

exec "print __name__" in {}

它打印__builtin__.

如何使第二个例子也打印__main__?

我试图实现的是使用exec运行一段代码,以便从它的角度看它是从命令行运行的.

我想用干净的范围来修改代码,但是第二个例子打破了依赖于__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 in {}
Damn __builtin__
>>> exec src in {'__name__':'__main__'}
Main!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读