Python – найти путь к запущенному файлу

Как я могу найти полный путь к текущему запущенному сценарию python? То есть, что мне нужно сделать для достижения этого:

Nirvana@bahamut:/tmp$ python baz.py running from /tmp file is baz.py 

  • Найти дополнительный список внутри списка в python
  • Импортировать файл из родительского каталога?
  • Как я могу изменить уровень ведения журнала на dev_appserver.py в движке Google?
  • Django - Как сделать переменную доступной для всех шаблонов?
  • Можно ли использовать приложение X-AppEngine-Country в приложении
  • Почему я не могу изменить или переназначить значения переменных в списках с помощью цикла for (python)?
  • проблемы с psycopg2 на движке Google Apps
  • Google App Engine: как отправить html с помощью send_mail
  • 6 Solutions collect form web for “Python – найти путь к запущенному файлу”

    __file__ НЕ является тем, что вы ищете. Не используйте случайные побочные эффекты

    sys.argv[0]всегда путь к скрипту (если на самом деле был вызван скрипт) – см. http://docs.python.org/library/sys.html#sys.argv

    __file__ – это путь к исполняемому файлу (скрипту или модулю). Это случайно так же, как и скрипт, если он доступен из скрипта! Если вы хотите поместить полезные вещи, такие как поиск файлов ресурсов относительно места расположения скриптов в библиотеке, вы должны использовать sys.argv[0] .

    Пример:

     C:\junk\so>type \junk\so\scriptpath\script1.py import sys, os print "script: sys.argv[0] is", repr(sys.argv[0]) print "script: __file__ is", repr(__file__) print "script: cwd is", repr(os.getcwd()) import whereutils whereutils.show_where() C:\junk\so>type \python26\lib\site-packages\whereutils.py import sys, os def show_where(): print "show_where: sys.argv[0] is", repr(sys.argv[0]) print "show_where: __file__ is", repr(__file__) print "show_where: cwd is", repr(os.getcwd()) C:\junk\so>\python26\python scriptpath\script1.py script: sys.argv[0] is 'scriptpath\\script1.py' script: __file__ is 'scriptpath\\script1.py' script: cwd is 'C:\\junk\\so' show_where: sys.argv[0] is 'scriptpath\\script1.py' show_where: __file__ is 'C:\\python26\\lib\\site-packages\\whereutils.pyc' show_where: cwd is 'C:\\junk\\so' 

    Это напечатает каталог, в котором живет сценарий (в отличие от рабочего каталога):

     import os dirname, filename = os.path.split(os.path.abspath(__file__)) print "running from", dirname print "file is", filename 

    Вот как это происходит, когда я положил его в c:\src :

     > cd c:\src > python so-where.py running from C:\src file is so-where.py > cd c:\ > python src\so-where.py running from C:\src file is so-where.py 
     import sys, os file = sys.argv[0] pathname = os.path.dirname(file) print 'running from %s' % os.path.abspath(pathname) print 'file is %s' % file 

    Проверьте os.getcwd () ( docs )

    Я бы предложил

     import os, sys print os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0] 

    Таким образом, вы можете безопасно создавать символические ссылки на исполняемый файл сценария, и он все равно найдет правильный каталог.

    Имя скрипта будет (всегда?) Первым индексом sys.argv:

     import sys print sys.argv[0] 

    Еще более простой способ найти путь к вашему скрипту:

     os.path.basename(sys.argv[0]) 

    __file__ файл всегда __file__ .

    Вот демонстрационный скрипт с именем identify.py

     print __file__ 

    Вот результаты

     MacBook-5:Projects slott$ python StackOverflow/identify.py StackOverflow/identify.py MacBook-5:Projects slott$ cd StackOverflow/ MacBook-5:StackOverflow slott$ python identify.py identify.py 
    Python - лучший язык программирования в мире.