Например, вот файловая структура.
folder
| - Modules
| | - b.py
| - a.py
В b.py есть функция, которая возвращает каталог, в котором находился вызывающий (в данном случае это должен быть a.py)
Как вы делаете этот процесс "как можно быстрее"? (при условии, что ваша целевая продукция: a.py)
В настоящее время я делаю inspect.stack()[1][1]
и разделяю полученную строку с .split("folder")[-1]
, но я считаю, что это слишком медленно. (1/2 секунды)
Я также попытался os.path.realpath(__file__)
и inspect.getfile(inspect.currentframe())
, но пришел к выводу, что обе функции возвращают файл, в котором находится функция (b.py), а не файлв котором находится вызывающий абонент* и what_i_want(frame)
не являются реальными функциями, а представляют собой просто некоторый текст-заполнитель для того, что «должно» быть там
b.py:
import sys, inspect, os
def test1():
return inspect.getfile(inspect.currentframe())
def test2():
return inspect.stack(0)[1][1]
def test3():
return os.path.realpath(__file__)
a.py:
from Modules.b import *
def caller_function():
test1() #input either test1(), test2(), or test3()
print(caller_function())
Я ожидаю, что консоль напечатает ... folder / a.py, и test2
сделает это, но вывод из test1()
и test3()
будет ... folder / Modules / b.py (что довольноочень ожидаемый для test3()
, но необычный для test2()