如果你正在从一个目录运行一个冻结的python脚本(使用py2exe冻结),并且驱动与脚本的位置不同,那么确定执行脚本path的最好方法是什么?
我尝试了几个解决scheme
inspect.getfile(inspect.currentframe())
问题:不返回完整path。 它只返回脚本名称。
os.path.abspath( __file__ )
问题:在Windows上不起作用
有没有办法允许多个程序在Windows上订阅相同的多播组?
Windows API来触发时间同步
如何从Windowsregistry中删除JRE条目?
如何在Windows中模拟SHIFT + END组合键
如何从剪贴板清除指定的格式数据?
os.path.dirname(sys.argv[0])
问题:返回空string。
os.path.abspath(inspect.getsourcefile(way3))
如果驱动器与pwd不同,则不起作用
os.path.dirname(os.path.realpath(sys.argv[0]))
如果驱动器与pwd不同,则不起作用
这是一个微不足道的例子
D:>path PATH=c:Python27;c:UsersabhibhatDesktopToBeRemovedspamdist;c:gnuwin32bin D:>cat c:UsersabhibhatDesktopToBeRemovedspameggs.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
相关问题:
如何知道Python中运行脚本的path?
python,脚本的path[closures]
注意
@ Fenikso的解决scheme将工作,如果脚本驻留在您正在执行相同的驱动器,但是当它在不同的驱动器上,它将无法正常工作
Windows上的GStreameraudiostream
如何杀死一个窗口?
在C ++中获得ring 0模式(Windows)
如何检测是否安装了MysqL?
无法使用for循环从windows批处理脚本中写入html
另一种方法,即使使用PATH从另一个驱动器运行cxFreeze:
import sys if hasattr(sys,'frozen'): print(sys.executable) else: print(sys.argv[0])
从Python:
H:PythonExamplescxfreezepwdme.py
从命令行:
D:>h:PythonExamplescxfreezedistpwdme.exe h:PythonExamplescxfreezedistpwdme.exe
使用PATH:
D:>pwdme.exe h:PythonExamplescxfreezedistpwdme.exe
恕我直言,根据绝对路径行事的代码不是一个好的解决方案。 相对路径解决方案可能会更好。 使用dirname知道相对目录和os.sep的跨平台兼容性。
if hasattr(sys,"frozen"): main_dir = os.path.dirname(sys.executable) full_real_path = os.path.realpath(sys.executable) else: script_dir = os.path.dirname(__file__) main_dir = os.path.dirname(os.path.realpath(sys.argv[0])) full_real_path = os.path.realpath(sys.argv[0])
冻结属性是python标准。
请看看Esky: http ://pypi.python.org/pypi/esky
尝试这个:
WD = os.path.dirname(os.path.realpath(sys.argv[0]))
这就是我使用cx_Freeze获取.exe实际运行的目录。