2012-08-28 4 views
1

나는 꾸미고있는 함수의 원래 파일/scriptname 등을 얻고 싶다. 어떻게해야합니까?파이썬에서 내 데코레이터로 전달되는 함수의 파일 이름은 어떻게 얻을 수 있습니까?

def decorate(fn): 
     def wrapped(): 
      return "scriptname: " + fn.scriptname? 
     return wrapped 

나는 fn.__code__을 사용해 보았지만 필자에게 필요한 것들이 더 많았다. ,

return "filename: " + fn.func_code.co_filename 
+0

은 프로덕션 코드에서 이런 종류의 물건에 의존하는 쪽 노트에 보통 좋지 않은 아이디어입니다. –

+0

@JoranBeasley 왜? – theRealWorld

+0

아래의 내용을 참고하십시오. –

답변

2

이가 시도 할 수있는 더 우아한 방법이 있는지 궁금 해서요 그것들은 inspect.getmodule으로 돌아 가야합니다.

+0

'fn .__ 코드 __. co_filename'일까요? – Retsam

+2

이것은 _implementation details_에 의존하며 CPython 외부에서 작동하지 않을 수 있음에 유의해야합니다. 'inspect'를 사용하는 것이 정확한 정답이지만, 왜 한 줄짜리가 더 쉬울 때 올바른 방향으로가는 것인가? : | –

+1

@Matthew Trevor Correct,'inspect'가 더 좋았습니다. 나는 이것에 대해 몰랐고 gnibbler의 대답으로 그것을 배웠습니다. – MostafaR

7
import inspect 
inspect.getfile(fn) 

이 비록 builtin functions 작동하지 않습니다 : 나는 함수 이름을 얻기 위해 해당 문자열을 구문 분석 할 수 있지만