Как получить путь к выполнению замороженного скрипта

Если вы используете замороженный 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 будет работать, если скрипт находится на том же диске, на котором вы выполняете, но когда он находится на другом диске, он не будет работать

9
задан Community 23 May 2017 в 12:09
поделиться