凍結された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のソリューションは、スクリプトが実行しているのと同じドライブにある場合は機能しますが、別のドライブにある場合は機能しません。