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) 收藏 举报
浙公网安备 33010602011771号