如何获取执行的冻结脚本的路径 [英] How to Get the Path of the executing frozen script
问题描述
如果从目录运行冻结的python脚本(使用py2exe冻结),并且驱动器与脚本所在的位置不同,那么确定执行脚本路径的最佳方法是什么?
If you are running a frozen python script (frozen using py2exe) from a directory and drive different from where the script is present, what is the best way to determine the path of the executing script?
我尝试过的几种解决方案
Few solutions I have tried
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不同,将无法工作
这是一个最小的无效示例
Here is a minimal not-working example
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
相关问题:
- How to know the path of the running script in Python?
- How do I get the path and name of the file that is currently executing?
- python, path of script [closed]
注意
@Fenikso的解决方案将在脚本位于您正在执行的同一驱动器上时起作用,但是当脚本位于不同的驱动器上时,它将不起作用
@Fenikso's solution will work if the script resides on the same drive where you are executing but when its on a different drive, it will not work
推荐答案
另一种方法,即使使用PATH从另一个驱动器运行,也可以与cxFreeze一起使用:
Another approach which works with cxFreeze when running from another drive even using PATH:
import sys
if hasattr(sys, 'frozen'):
print(sys.executable)
else:
print(sys.argv[0])
从Python:
H:\Python\Examples\cxfreeze\pwdme.py
从命令行:
D:\>h:\Python\Examples\cxfreeze\dist\pwdme.exe
h:\Python\Examples\cxfreeze\dist\pwdme.exe
使用PATH:
D:\>pwdme.exe
h:\Python\Examples\cxfreeze\dist\pwdme.exe
这篇关于如何获取执行的冻结脚本的路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!