Python __main __.__ file__

时间:2015-02-17 19:15:47

标签: python

我有一个简单的问题,我在python文档中找到答案时遇到了问题。

文件名= Test_.py

import __main__

def test():
    print('test text')

if __name__ == "__main__":
    print(__main__.__file__)
    test()

当我从cmd行运行它时,它返回:

c:\Python27\Test_.py
'test text'

但如果我通过单击'run'(F5)从python运行它,我会得到。

Traceback (most recent call last):
  File "C:\Python27\Test_.py", line 7, in <module>
    print(__main__.__file__)
AttributeError: 'module' object has no attribute '__file__'

为什么我可以从命令行运行它并且它工作正常,但如果我从python运行它我得到一个错误。当我从python运行它时,有没有办法获得c:\Python27\Test_.py

1 个答案:

答案 0 :(得分:6)

从文件运行脚本时,__main__模块实际上就是该文件。另一方面,在Python解释器提示符中,__main__模块只是解释器的默认命名空间,特别是交互式提示符正在运行,并且没有与之关联的文件(松散地说文件是<stdin>)。

当您点击F5以在空闲状态下运行代码时,如果您只是直接将该代码复制/粘贴到解释器中,那么它就等效。它无法与该文件建立任何关联。

另一方面,如果您运行import Test_,那么该文件中的代码现在与Test_模块相关联,您会发现Test_.__file__提供了相关的文件名。

对于它的价值,import __main__几乎没有任何理由。如果您希望脚本打印文件,那么它就用完了,您可以:

if __name__ == '__main__':
    print __file__

其他可能性。