2015-01-07 3 views
0

inspect.getsource(obj)을 사용하여 함수의 소스 코드를 얻을 수 있습니다.인쇄 소스 코드를 검사하는 방법

print(inspect.getsource(gcd)) 

gcd 기능의 소스 코드를 인쇄합니다. 다음을 시도하면 오류가 발생합니다.

>>>print(inspect.getsource(print)) 

    File "<stdin>", line 1 
    print(inspect.getsourcelines(print)) 
           ^
    SyntaxError: invalid syntax 

인쇄 소스 코드를 얻을 수 있습니까? 그렇다면 어떻게?, 없으면 왜?

+3

아니요,'print'는 C로 작성된 함수이기 때문에'inspect'는 파이썬 함수의 소스 만 가져올 수 있습니다. – vaultah

+1

파이썬은 오픈 소스이므로 전체 소스 코드는 온라인에서 사용할 수 있다는 것을 알고 있습니까? 'inspect' (파이썬 2에서는'print'는 파이썬 2의 언어 키워드이므로 구문 오류가 발생합니다)를 사용하는 대신 저장소에서 바로 가져올 수 있습니다. – l4mpi

+0

@ l4mpi 예, 저는 파이썬이 오픈 소스라는 것을 알고 있습니다. 그래서 저는 인쇄의 소스 코드를 보려고했습니다. – Venkatesh

답변

4

vaultah가 제공 한 속임수 대상보다 많은 정보를 추가하려고하면 답이됩니다.

다음 답변은 3.x를 직접 처리하므로 아직 2.x에있는 것으로 나타났습니다. 좋은 글을 쓰려면 answer을 확인하십시오.

실제로이 문제에 대한 올바른 경로가 있지만 문제는 print이 내장되어 있으므로 inspect.getsource은 여기에서별로 도움이되지 않습니다. 이다

는 대답 :

>>> inspect.getsource.__doc__ 
'Return the text of the source code for an object. 

The argument may be a module, class, method, function, traceback, frame,  
or code object. The source code is returned as a single string. An 
OSError is raised if the source code cannot be retrieved.' 

어디를 printtype입니다 같이 더 구체적으로

>>> type(print) 
<class 'builtin_function_or_method'> 

그리고 :

>>> print.__module__ 
'builtins' 

얼마나 불행한,이 getsource에 의해 지원되지 않는 .

당신은 옵션이 있습니다

1) Python source code을 통해 걸어와 내장이 구현 된 방법을 참조하십시오. 제 경우에는 거의 항상 CPython을 사용합니다. 따라서 CPython directory부터 시작하겠습니다.

우리가 builtin 모듈을 찾고 있다는 것을 알고 있기 때문에 /Python dir에 들어가서 내장 모듈을 포함하고있는 것처럼 보입니다. bltinmodule.c은 안전한 추측입니다. 해당 인쇄물을 호출 할 수있는 함수로 정의해야한다는 사실을 알고 print(을 검색하면 정의 된대로 builtin_print(Pyobject...으로 바뀝니다.

2) 빌트인 함수 이름 규칙을 추측하고 builtin_print을 코드 레포에서 검색하십시오.

3) Puneeth Chaganti의 Cinspect과 같이 장면 뒤에서 마술을하는 도구를 사용하십시오.

+0

귀하의 대답은 Python 3.x에 유효합니다. 그러나 OP는 Python 2.7을 사용하고 있으며,'print'는 성명서. –

+0

@brunodesthuilliers 그래, 나는 게시 후 그것을 알아 냈다. 중요한 것을 처리하기 위해 실행해야하고 나중에 편집 할 것입니다. –

관련 문제