在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
那么将输出空字符串
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