Как определить имя файла, который вызывает функцию в python?

#python

#питон

Вопрос:

У меня есть server.py который содержит функцию и другие файлы, такие как requestor1.py requestor2.py …. requestorN.py

Server.py содержит функцию :

 def callmeforhelp()
    return "I am here to help you out!"
 

и requestor1.py file вызывает функцию callmeforhelp(), и она содержит импорт, необходимый для вызова функции из server.py

Есть ли способ мой server.py знает, какой файл его вызывает?

Что-то похожее, как показано ниже :

Когда requestor1.py вызывает функцию, затем :

 def callmeforhelp()
    print "Now I am being called by : " caller // caller must contain the value as requestor1.py or even full path of requestor1.py
    return "I am here to help you out!"
 

Ответ №1:

Вот способ получить доступ к локальным атрибутам вызывающего объекта:

 import sys

def callmeforhelp():
    print("Called from", sys._getframe(1).f_locals['__file__'])
 

Это особенность CPython и не гарантируется, что она присутствует в других языковых реализациях.

Ответ №2:

Попробуйте это в вашем server файле:

 import inspect

def callmeforhelp():
    result = inspect.getouterframes(inspect.currentframe(), 2)
    print("Caller is: "   str(result[1][1]))
 

Комментарии:

1. Может ли это вернуть полный путь к файлу?

2. @PrasathGovind: он даст вам адрес. Я попробовал это с этим образцом, и у меня все отлично работает: main.py, src/requester.py, src/sever.py . requester.py вызовет метод server.py . а main.py file — это основной файл , который был вызван requester.py . И я начинаю его словами: python main.py .