如果您正在从与脚本不同的目录和驱动器运行经过冻结的Python脚本(使用py2exe进行冻结),那么确定执行脚本的路径的最佳方法是什么?
我尝试了一些解决方案:
inspect.getfile(inspect.currentframe())
问题:不返回完整路径,只返回脚本名称。
os.path.abspath( __file__ )
问题:在Windows上无法工作
os.path.dirname(sys.argv[0])
问题: 返回空字符串。
os.path.abspath(inspect.getsourcefile(way3))
如果驱动器与pwd不同,则无法工作
os.path.dirname(os.path.realpath(sys.argv[0]))
如果驱动器与pwd不同,将无法工作
这是一个最小的不起作用的示例
D:\>path
PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin
D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py
import os, inspect, sys
def way1():
return os.path.dirname(sys.argv[0])
def way2():
return inspect.getfile(inspect.currentframe())
def way3():
return os.path.dirname(os.path.realpath(sys.argv[0]))
def way4():
try:
return os.path.abspath( __file__ )
except NameError:
return "Not Found"
def way5():
return os.path.abspath(inspect.getsourcefile(way3))
if __name__ == '__main__':
print "Path to this script is",way1()
print "Path to this script is",way2()
print "Path to this script is",way3()
print "Path to this script is",way4()
print "Path to this script is",way5()
D:\>eggs
Path to this script is
Path to this script is eggs.py
Path to this script is D:\
Path to this script is Not Found
相关问题:
注意:
@Fenikso的解决方案只适用于脚本与当前执行的驱动器相同的情况。当脚本在不同的驱动器上时,它将无法工作。