【发布时间】:2011-02-25 12:35:04
【问题描述】:
我处于空闲状态:
>>> import mymodule
>>> # ???
导入模块后:
if __name__ == '__main__':
doStuff()
我实际上如何从 IDLE 调用 main?
【问题讨论】:
标签: python python-idle runpy
我处于空闲状态:
>>> import mymodule
>>> # ???
导入模块后:
if __name__ == '__main__':
doStuff()
我实际上如何从 IDLE 调用 main?
【问题讨论】:
标签: python python-idle runpy
__name__ == '__main__' 上的 if 条件是为了让代码在您的模块直接执行时运行,而在导入时不运行。确实没有“主要”这样的概念,例如在爪哇。在解释 Python 时,在导入/运行模块时会读取并执行所有代码行。
Python 提供了__name__ 机制,用于区分导入情况和将模块作为脚本运行时的情况,即python mymodule.py。在第二种情况下,__name__ 将具有值 '__main__'
如果您想要一个可以运行的 main(),只需编写:
def main():
do_stuff()
more_stuff()
if __name__ == '__main__':
main()
【讨论】:
如果你导入一些东西,它不是主要的。您需要从菜单中运行它,或者在您开始空闲时作为参数运行它。
【讨论】:
我想你是在调用 if __name__ == '__main__' 之后的'main'。这么称呼它:
>> import mymodule
>> mymodule.doStuff()
否则,如果您的模块中确实有一个 main 函数,那么,
>> import mymodule
>> mymodule.main()
【讨论】:
我在 Python 2.6 中找到了另一种按名称运行模块的方法:
>>> import runpy
>>> runpy.run_module('mypack.mymodule')
run_module 返回一个包含所有已创建属性的字典
http://docs.python.org/library/runpy.html?highlight=runpy#runpy.run_module
【讨论】:
关于taleinat提到的execfile。
建议使用 Python 3.5 已弃用的 execfile 代替以下方法。
删除了 execfile()。代替 execfile(fn) 使用 exec(open(fn).read())。
PS:由于 stackoverflow 中缺少信誉点,我无法评论 taleinat 的解决方案。
【讨论】:
编辑:更新了这个旧答案,因为execfile 在 Python 3 中已被删除。
使用execfile(即execfile(file_path))而不是使用导入。
按照Carles Barrobés's answer 中的建议使用runpy 模块。
更新:
条件if __name__ == '__main__' 的目的是让“if”块中的代码不在导入模块时被执行。此类代码仅在文件直接运行时才会运行,例如通过从命令行运行“python filename”或使用execfile(_filename_)。
根据要求,使用 execfile 的示例。在C:\my_code.py:
if __name__ == '__main__':
print "Hello World!"
然后,在解释器中:
>>> execfile("C:\\my_code.py")
Hello world!
【讨论】:
您所要做的就是像 joaquin 所说的那样调用 main 函数本身。
我的做法是在文件所在位置保持一个终端打开,并在需要时重新运行该命令。
最后一种方法是使用 geany 或 Idle 之类的 IDE,并使用 (file>open) 打开它,然后按 F5。
该:
if __name__ == '__main__':
doStuff()
你实际上是为了让 main 函数在被导入时不运行。
【讨论】: