Python __main __.__ file__

Try*_*ard 0 python

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

文件名= Test_.py

import __main__

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

if __name__ == "__main__":
    print(__main__.__file__)
    test()
Run Code Online (Sandbox Code Playgroud)

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

c:\Python27\Test_.py
'test text'
Run Code Online (Sandbox Code Playgroud)

但如果我通过单击"运行"(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__'
Run Code Online (Sandbox Code Playgroud)

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

Igu*_*aut 6

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

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

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

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

if __name__ == '__main__':
    print __file__
Run Code Online (Sandbox Code Playgroud)

其他可能性.