например, метод a.boo
вызывает метод b.foo
. В методе b.foo
, как я могу получить имя файла (я не хочу передавать метод __file__
в b.foo
)...
Как получить имя вызывающего файла, имя метода в python
Ответ 1
Для этого вы можете использовать модуль inspect
:
frame = inspect.stack()[1]
module = inspect.getmodule(frame[0])
filename = module.__file__
Ответ 2
Вдохновлен ответом ThiefMaster, но работает также, если inspect.getmodule()
возвращает None
:
frame = inspect.stack()[1]
filename = frame[0].f_code.co_filename
Ответ 3
Вы можете использовать модуль traceback
:
import traceback
и вы можете распечатать обратную трассировку следующим образом:
print traceback.format_stack()
Я не использовал это годами, но этого должно быть достаточно, чтобы вы начали.
Ответ 4
Читая все эти решения, кажется, это тоже работает?
import inspect
print inspect.stack()[1][1]
Второй элемент во фрейме уже является именем файла вызывающего абонента или это не надежно?
Ответ 5
Это можно сделать с помощью модуля inspect
, в частности inspect.stack
:
import inspect
import os.path
def get_caller_filepath():
# get the caller stack frame and extract its file path
frame_info = inspect.stack()[1]
filepath = frame_info[1] # in python 3.5+, you can use frame_info.filename
del frame_info # drop the reference to the stack frame to avoid reference cycles
# make the path absolute (optional)
filepath = os.path.abspath(filepath)
return filepath
Демонстрация:
import b
print(b.get_caller_filepath())
# output: D:\Users\Aran-Fey\a.py