文件 Find_Path.py
print 'os.getcwd():', os.getcwd()
print 'os.path.abspath(os.curdir):', os.path.abspath(os.curdir)print "os.path.abspath('.'):", os.path.abspath('.')
print 'sys.path[0]:', sys.path[0]
print 'sys.argv[0]:', sys.argv[0]
在命令行窗口下执行Find_Path.py
结果如下:
使用命令 pyinstaller Find_Path.py将Find_Path.py打包成exe程序,执行Find_Path.exe,结果如下:
使用命令pyinstaller -F Find_Path.py重新将Find_Path.py打包成单个exe程序时,执行Find_Path.exe,结果如下:
综上分析:
os.getcwd()、os.path.abspath(os.curdir)、os.path.abspath('.')在以上三种情况下的结果都是执行文件所在的目录
sys.argv[0]是当前执行的Python脚本的文件名,不一定是当前的路径。
sys.path[0]是当前系统环境变量的第一个值。当运行.py和以生成多文件模式打包的可执行文件时,输出结果是程序的当前目录。而由单文件模式打包生成的可执行文件,输出结果是系统的默认当前工作目录。
由于os.getcwd()、os.path.abspath(os.curdir)、os.path.abspath('.')是获取的当前python 的工作目录,而工作目录是可以通过os.chdir(path)更改的。
os.chdir(path):改变当前工作目录到指定路径path。
所以如果想要获取当前路径,最稳定的方法是:os.path.dirname(sys.argv[0])