2013-08-20 2 views
5

스크립트의 소스 코드를 인쇄하는 것이 가능합니까 (파이썬 인트로 스펙 션을 사용하지 않아도됩니까?)?소스를 인쇄하는 Python 스크립트

원본을 인쇄하는 짧은 파이썬 스크립트를 실행하고 싶습니다 (어떤 명령이 실행되는지 볼 수 있도록).

command1() 
#command2() 
command3() 

print some_variable_that_contain_src 

실제 응용 프로그램에서 나는 run -i 마법 IPython에서 스크립트를 실행하려면 출력으로 소스 (즉, 명령이 실행 된)를 가지고있다 :

스크립트는이 같은 것입니다. 이 방법으로 매 실행마다 주석이 달린 명령을 확인할 수 있습니다. 또한, 노트북에서 실행하면 어떤 명령을 사용했는지 추적 할 수 있습니다.

솔루션

나는이 한 줄에 결국 솔루션은 스크립트의 시작 부분에 넣어 될 korylprince를 사용하여 :

with open(__file__) as f: print '\n'.join(f.read().split('\n')[1:]) 

이 (첫 줄을 제외한 스크립트 소스를 인쇄합니다 그것은 단지 소음 일 것이다). 또한 스크립트의 다른 "슬라이스"를 인쇄하기 위해 슬라이싱을 수정하는 것도 쉽습니다. 나는 또한 검사 패키지를 사용하여 시도

import my_module 

print open(my_module.__file__).read() 

: 가장 간단한 대답에 대한

with open(__file__) as f: print f.read() 
+0

파이썬의 inspect 패키지를 살펴 보시기 바랍니다 : http://www.python.org/doc//current/library/inspect.html. 특히 getsource 메소드 – Greg

+0

이 유형의 프로그램은 Quine 프로그램이라고합니다. http://en.wikipedia.org/wiki/Quine_(computing) 나는 파이썬으로 그 중 하나를 쓰려고하는데, 너무 어렵다. : – thefourtheye

+0

첫 번째 줄을 지우는 이유 스크립트를 실행하면 소스 코드 인쇄에 관한 내용을 포함하지 않는 소스 코드를 인쇄 할 수 있습니다. * 혼란 스럽습니다. 첫 번째 줄은 코멘트 또는 단언은 잡음입니다. – user2357112

답변

8

만큼 당신이하지 않은 당신에게

for line in source_list[0]: 
    print line 

이 읽을 수있는 방식으로 전체 소스 코드를 출력 할 것인가 거기에 정의 된 소스 코드와 함께 문자열 목록을 줄 것이다 패키지에 미친 짓을 하다니, 스크립트 상단에 붙여 넣으시오.

with open(__file__) as f: 
    print f.read() 

현재 파일에서

+0

예, 스크립트 시작 부분에만 적용됩니다. 마지막에 넣으면 다른 스크립트를 실행하면 마지막으로 실행 한 파일이 인쇄됩니다. . – user2304916

4

: 대신 전체 파일을 인쇄 할 경우에

는 한 줄을 단순화합니다.

import inspect 

import my_module 

source_list = inspect.getsourcelines(my_module) 

+0

이 스크립트는 가져 오기가 아니라 실행하기 때문에 스크립트에서는 작동하지 않습니다. – user2304916

관련 문제