sys.argv[0]和__file__的区别

sys.argv[0],指的是被执行的脚本的脚本名

__file__,指的是模块的文件名

假如,模块名是被执行的,那么脚本名和模块名是相同的,sys.argv[0]和__file__是相同的。

假如,模块名不是被执行的,是被import的,那么脚本名和模块名是不相同的,sys.argv[0]和__file__这时是不相同的;此时,__file指的是被模块名,sys.argv[0]仍然指的是脚本名。

所以要想获得脚本名,用sys.argv[0],不会有错;要想获得模块名,用__file__,不会有错。

sys.argv[0]和__file__相等的情况,只有模块名被执行的情况。

sys.argv[0]和__file__不相等的情况,只有模块名被导入的情况。

示例一:

模块被执行,模块名即脚本名,此时sys.argv[0]和__file__是相同的。

文件名为test1.py的代码如下:

import sys, os
print "this is sys.argv[0] : ", sys.argv[0]
print "this is  __file__ : ", __file__
print "cwd is : ", os.getcwd()

# python test1.py
this is sys.argv[0] :  test1.py
this is  __file__ :  test1.py
cwd is :  /root/workspace/CUG_TORNADO

 

 示例二:

模块不是被执行,而是import的,此时模块名不等于脚本名,sys.argv[0]和__file__就是不相同的。

文件名为test2.py的代码如下:

import sys, os
print "this is sys.argv[0] : ", sys.argv[0]
print "this is  __file__ : ", __file__
print "cwd is : ", os.getcwd()

import module1

module1.py的代码如下:

import sys, os
print "this is sys.argv[0] : ", sys.argv[0] print "this is __file__ : ", __file__ print "cwd is : ", os.getcwd()

# python test2.py
this is sys.argv[0] :  test2.py
this is  __file__ :  test2.py
cwd is :  /root/workspace/CUG_TORNADO
this is sys.argv[0] :  test2.py
this is  __file__ :  /root/workspace/CUG_TORNADO/module1.py
cwd is :  /root/workspace/CUG_TORNADO

posted on 2017-08-19 13:21  myworldworld  阅读(300)  评论(0)    收藏  举报

导航