python __file__ 与argv[0]

在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__。


1. sys.argv[0]

获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径,所以再取一下abspath是保险的做法,像这样:

import os,sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
print "1", dirname
print "2", filename
执行结果
python test.py
1 /devcode/user/bin/dw_clsfd
2 test.py


同样的

print "3",sys.path[0] 
print "4",sys.argv[0]
print "5",os.getcwd()

执行结果

3 /devcode/user/bin/dw_clsfd #运行脚本目录
4 /dw/etl/home/dev/bin/dw_clsfd/test.py #当前脚本的目录
5 /devcode/user/bin/dw_clsfd #运行脚本目录
过sys.path[0],os.getcwd()获得的是执行脚本的目录

2.__file__

a.python中os.path.dirname(__file__)

print "7",os.path.dirname(__file__)

(1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如:
python /dw/etl/home/dev/bin/dw_clsfd/test.py 
7 /dw/etl/home/dev/bin/dw_clsfd #当前脚本所在的目录
(2).当"print os.path.dirname(__file__)"所在脚本是以相对路径被运行的, 那么将输出空目录,比如:
python test.py
那么将输出空字符串


b.其他

print "6",__file__
print "7",os.path.realpath(__file__)
print "8",os.path.abspath(__file__)
print "9",os.path.dirname(os.path.realpath(__file__))
print "10",os.path.dirname(os.path.abspath(__file__))

执行结果

6 /dw/etl/home/dev/bin/dw_clsfd/test.py
7 /devcode/user/bin/dw_clsfd/test.py #脚本运行目录
8 /dw/etl/home/dev/bin/dw_clsfd/test.py
9 /devcode/user/bin/dw_clsfd  #脚本运行目录
10 /dw/etl/home/dev/bin/dw_clsfd

参考:

http://printfabcd.iteye.com/blog/1279260


你可能感兴趣的:(Python)