Как я могу получить путь и имя файла, который выполняется в настоящее время? - PullRequest
441 голосов
/ 08 сентября 2008

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

Например, допустим, у меня есть три файла. Использование execfile :

  • script_1.py звонки script_2.py.
  • В свою очередь, script_2.py звонит script_3.py.

Как я могу получить имя файла и путь script_3.py, из кода в script_3.py без необходимости передавать эту информацию в качестве аргументов из script_2.py?

(Выполнение os.getcwd() возвращает исходный путь к файлу исходного сценария, а не текущий файл.)

Ответы [ 27 ]

8 голосов
/ 08 сентября 2008

Атрибут __file__ работает как для файла, содержащего основной код выполнения, так и для импортируемых модулей.

См. https://web.archive.org/web/20090918095828/http://pyref.infogami.com/__file__

5 голосов
/ 08 сентября 2008

Я думаю, что это просто __file__ Звучит так, как будто вы также можете захотеть проверить модуль проверки .

5 голосов
/ 02 января 2010
import sys

print sys.path[0]

это напечатало бы путь к исполняемому в данный момент скрипту

4 голосов
/ 09 сентября 2008

Вы можете использовать inspect.stack()

import inspect,os
inspect.stack()[0]  => (<frame object at 0x00AC2AC0>, 'g:\\Python\\Test\\_GetCurrentProgram.py', 15, '<module>', ['print inspect.stack()[0]\n'], 0)
os.path.abspath (inspect.stack()[0][1]) => 'g:\\Python\\Test\\_GetCurrentProgram.py'
4 голосов
/ 22 февраля 2019

Попробуйте это,

import os
os.path.dirname(os.path.realpath(__file__))
3 голосов
/ 19 апреля 2010
import sys
print sys.argv[0]
2 голосов
/ 14 июня 2015

Это должно работать:

import os,sys
filename=os.path.basename(os.path.realpath(sys.argv[0]))
dirname=os.path.dirname(os.path.realpath(sys.argv[0]))
1 голос
/ 05 мая 2019
print(__file__)
print(__import__("pathlib").Path(__file__).parent)
1 голос
/ 12 апреля 2018

Чтобы сохранить согласованность миграции между платформами (macOS / Windows / Linux), попробуйте:

path = r'%s' % os.getcwd().replace('\\','/')

1 голос
/ 10 мая 2017

Получить каталог исполняемого скрипта

 print os.path.dirname( inspect.getfile(inspect.currentframe()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...