파이썬에서 호출 함수 모듈의 __name_을(를) 가져옵니다.
가정하다myapp/foo.py
포함:
def info(msg):
caller_name = ????
print '[%s] %s' % (caller_name, msg)
그리고.myapp/bar.py
포함:
import foo
foo.info('Hello') # => [myapp.bar] Hello
나는 되고 싶다.caller_name
에 착수할 예정인__name__
이 경우 호출 함수' 모듈의 속성(즉, 'myapp.foo')입니다.이것이 어떻게 행해지는가?
검사 모듈을 확인합니다.
inspect.stack()
스택 정보를 반환합니다.
함수 안에서,inspect.stack()[1]
호출자의 스택을 반환합니다.거기서 발신자의 기능 이름, 모듈 등에 대한 자세한 정보를 얻을 수 있습니다.
자세한 내용은 문서를 참조하십시오.
http://docs.python.org/library/inspect.html
또한 Doug Hellmann은 PyMOTW 시리즈에서 검사 모듈에 대해 잘 설명하고 있습니다.
http://pymotw.com/2/inspect/index.html#module-inspect
편집: 원하는 작업을 수행할 수 있는 코드가 있습니다.
import inspect
def info(msg):
frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0])
print '[%s] %s' % (mod.__name__, msg)
비슷한 문제에 직면하여 시스템을 찾았습니다.sys 모듈의 _current_frames(_current_frames)에는 최소한 특정 사용 사례에서 검사를 가져올 필요 없이 사용자에게 유용한 흥미로운 정보가 포함되어 있습니다.
>>> sys._current_frames()
{4052: <frame object at 0x03200C98>}
그런 다음 f_back을 사용하여 "위로 이동"할 수 있습니다.
>>> f = sys._current_frames().values()[0]
>>> # for python3: f = list(sys._current_frames().values())[0]
>>> print f.f_back.f_globals['__file__']
'/base/data/home/apps/apricot/1.6456165165151/caller.py'
>>> print f.f_back.f_globals['__name__']
'__main__'
파일 이름으로 f.f_back을 사용할 수도 있습니다.f_code.co_filename은 위의 Mark Roddy가 제안한 것과 같습니다.이 방법의 한계와 주의 사항은 잘 모르겠지만(여러 스레드가 문제가 될 가능성이 높습니다), 제 경우에는 이 방법을 사용하려고 합니다.
이 작업은 권장하지 않지만 다음 방법으로 목표를 달성할 수 있습니다.
def caller_name():
frame=inspect.currentframe()
frame=frame.f_back.f_back
code=frame.f_code
return code.co_filename
그런 다음 기존 방법을 다음과 같이 업데이트합니다.
def info(msg):
caller = caller_name()
print '[%s] %s' % (caller, msg)
저는 다음 줄이면 발신자의 이름을 알 수 있습니다.
import inspect
frame = inspect.stack()[-1]
print(frame.filename)
언급URL : https://stackoverflow.com/questions/1095543/get-name-of-calling-functions-module-in-python
'programing' 카테고리의 다른 글
문서의 배열 요소를 Mongoose 삭제하고 저장 (0) | 2023.07.24 |
---|---|
"NUMBER"와 "NUMBER(*,0)"는 Oracle에서 동일합니까? (0) | 2023.07.24 |
StackOverflowError(스택오버플로 오류)로 인해 웹 응용 프로그램 [/app]에 대한 주석 검색을 완료할 수 없습니다. (0) | 2023.07.24 |
MariaDB: 내부 쿼리 결과에 PK 사용 (0) | 2023.07.24 |
PIL을 사용하여 이미지에 텍스트 추가 (0) | 2023.07.24 |