2016-10-21 5 views
2

파이썬은 atexit 모듈이 인터프리터 닫기 전에 실행할 함수를 등록했습니다. This question 왜 atexit가 호출되지 않는 지 잘 알고 있습니다.ipxthon 대신 atexit

%run <name>과 함께 실행 된 항목을 종료하기 전에 ipython에 대한 대안이 있는지 궁금합니다. 이상 적으로는 인터프리터에 따라 모듈에 레지스터를 사용하는 데코레이터를 만들고 싶습니다.

+1

,하지만 당신은 하나 [사용자 지정 마술을 정의] 수있다 : 그렇지 않으면이 코드 조각은 다른 사람 도움이 있습니다// 안정/config/custommagics.html)'% run'과 몇 가지 조치를 취하거나 [post_run_cell 콜백 제공] (http://ipython.readthedocs.io/en/stable/config/callbacks.html) 각 입력이 실행 된 후 –

답변

2

좋은 의견을 보내 주신 Thomas K에게 감사드립니다. 그가 대답을 쓰는 경우에 나는 그를 받아 들일 것이다. http://ipython.readthedocs.io/ (특히 %의 run``후 발사 일이 없습니다

# exit_register runs at the end of ipython %run or the end of the python interpreter 
try: 
    def exit_register(fun, *args, **kwargs): 
     """ Decorator that registers at post_execute. After its execution it 
     unregisters itself for subsequent runs. """ 
     def callback(): 
      fun() 
      ip.events.unregister('post_execute', callback) 
     ip.events.register('post_execute', callback) 


    ip = get_ipython() 
except NameError: 
    from atexit import register as exit_register 


@exit_register 
def callback(): 
    print('I\'m done!') 


print('Running') 
+1

위대한 작품입니다. 추가 할 한 가지. 'atexit.register'는 인수와 키워드 인수를 취할 수 있습니다. 'exit exit_register (fun, * args, ** kwargs)'와'fun (* args, ** kwargs) '를 통해 이것을 허용하기 위해'exit_register'를 변경하는 것을 고려하십시오. – JesterEE

+0

@JesterEE. 그것을 언급 해 주셔서 고마워요. 결정된 –