Python에서 함수의 호출 관계를 파악하려면 sys 패키지의 _getframe() 함수를 이용하여 콜 스택을 확인하는 방법이 있다.
#!/usr/bin/env python
import sys
def funcname():
return sys._getframe(1).f_code.co_name + "()"
def callername():
return sys._getframe(2).f_code.co_name + "()"
def test():
print(funcname())
print(callername())
def main():
test()
if __name__ == "__main__":
main()
출력
test()
main()
또 다른 방법으로 inspect 패키지의 stack() 함수를 이용해서 콜 스택을 확인하는 방법이 있다.
import inspect
def funcname():
return inspect.stack()[1][3] + "()"
def callername():
return inspect.stack()[2][3] + "()"
def test():
print(funcname())
print(callername())
def main():
test()
if __name__ == "__main__":
main()
이 두 가지 방법의 공통점은 함수 call stack의 상대적인 위치로 두번째, 세번째 프레임을 사용한다는 것이다. 두번째를 가리키는 인덱스 1, 세번째를 가리키는 인덱스 2가 사용된 것에 주의할 것