Python sys.argv 替代方案,Unicode bug
我一直在用 os.path.abspath(sys.argv[0])
来获取我的程序运行时的路径(无论从哪里执行都没关系),但是在 Python 2.x 中,sys.argv 有个问题,具体可以看这个链接 http://bugs.python.org/issue2128,就是在使用脚本路径时遇到了 Unicode 的问题,这个问题影响了 Glade(PYGTK)文件的使用。
self.gladeloc = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),"file.glade")
print self.gladeloc #prints fine C:\Users\фдсфгс\Desktop\ using idle console
self.builder.add_from_file(self.gladeloc) #prints C:\Users\пїЅпїЅпїЅ\Desktop\
我遇到了以下错误,想问有没有其他方法可以获取程序在磁盘上的位置(无论从哪里打开都可以)。我查了其他问题,似乎没有其他方法可以解决这两个问题:
1. 获取文件位置,即使是从不同的地方执行。
2. Unicode/UTF-8 支持,pygtk 不支持 Python 3(虽然修复了 sys.argv),所以我不能简单地升级。
1 个回答
0
我发现了这个答案,它会把sys.argv这个函数改成在Python 2.x中返回unicode类型。不过我觉得它的表现和原来的sys.argv不太一样,至少在Idle控制台中,它显示的是python.exe
的路径,而在命令行控制台中则显示了正确的file.py
。我觉得我找到了一种更好的解决办法,不用修改sys.argv,Idle控制台也能正确显示file.py
的unicode类型,方法是os.path.abspath(sys.argv[0].decode('mbcs'))
。如果有人对此有反馈就太好了,可能我漏掉了什么?我会继续测试,如果发现不如预期会更新的。