반응형
Python의 다른 함수 내에서 호출자 함수 이름을 얻습니까? [복제]
이 질문에 이미 답변이 있습니다.
다음과 같은 두 가지 기능이있는 경우 :
def A
def B
A가 B를 호출하면 B 내부에서 B를 호출하는 사람을 알 수 있습니다.
def A () :
B ()
def B () :
this.caller.name
inspect 모듈을 사용하여 원하는 정보를 얻을 수 있습니다 . 그 스택 방법은 프레임 기록의 목록을 반환합니다.
들어 파이썬이 각 프레임 레코드 목록입니다. 각 레코드의 세 번째 요소는 발신자 이름입니다. 원하는 것은 다음과 같습니다.
>>> import inspect >>> def f(): ... print inspect.stack()[1][3] ... >>> def g(): ... f() ... >>> g() g
들어 파이썬 3.5 , 각 프레임 레코드는이다 라는 튜플 은 교체해야하므로
print inspect.stack()[1][3]
와
print(inspect.stack()[1].function)
위의 코드에서.
sys
및 inspect
모듈을 사용하는 두 가지 방법이 있습니다 .
sys._getframe(1).f_code.co_name
inspect.stack()[1][3]
stack()
형태는 덜 읽을 수 있으며 호출하기 때문에 구현 의존 sys._getframe()
에서 추출 참조 inspect.py
:
def stack(context=1):
"""Return a list of records for the stack above the caller's frame."""
return getouterframes(sys._getframe(1), context)
참고 (2018 년 6 월) : 오늘은 아마도 inspect
모듈을 사용하고 다른 답변을 볼 것입니다.
sys._getframe(1).f_code.co_name
아래 예와 같이 :
>>> def foo():
... global x
... x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>
중요 참고 사항 : _getframe
메서드 이름 (밑줄로 시작 함)에서 알 수 있듯이 무심코 의존해야하는 API 메서드가 아닙니다.
이것은 나를 위해 작동합니다! :디
>>> def a():
... import sys
... print sys._getframe(1).f_code.co_name
...
>>> def b():
... a()
...
...
>>> b()
b
>>>
로깅 모듈을 사용하고 BaseConfig ()에서 % (funcName) s 옵션을 지정할 수 있습니다.
import logging
logging.basicConfig(filename='/tmp/test.log', level=logging.DEBUG, format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s')
def A():
logging.info('info')
반응형
'Programming' 카테고리의 다른 글
현재 날짜 / 시간을 DD / MM / YYYY HH : MM 형식으로 가져 오려면 어떻게해야합니까? (0) | 2020.08.09 |
---|---|
Linux에서 파일 끝에 줄을 추가하는 방법 (0) | 2020.08.09 |
Java의 표준 입력에서 정수 값을 읽는 방법 (0) | 2020.08.09 |
Execute Shell은 Jenkins에서 빌드를 실패로 표시하는 방법 /시기는 무엇입니까? (0) | 2020.08.09 |
JAR 파일 내의 파일을 나열하는 방법은 무엇입니까? (0) | 2020.08.09 |