2011-04-23 2 views
3

저는 파이썬 파일을 가지고 있습니다. 파이썬 파일은 ipython에서 지속적으로 수정하고 테스트하는 많은 함수를 보유하고 있습니다. 내 현재 워크 플로는 각 명령 앞에 "% run myfile.py"를 실행하는 것입니다. 그러나, 이상적으로, 나는 그것이 자동적으로 일어나기를 바랄 뿐이다. 그게 가능하니?ipython에서 명령을 실행하기 전에 자동 실행되도록 파일을 가져 오는 방법은 무엇입니까?

답변

2

정말로 rlwrap을 사용하려면 필터를 작성하십시오. 입력에 %run myfile.py을 추가하는 input_handler을 정의하고 원래 입력을 에코하도록 echo_handler을 정의하면이 상황이 보이지 않습니다 (man RlwrapFilter은 필터 작성에 대해 알고 싶었던 모든 것을 말한 다음 일부만 알려줍니다).

하지만 ipython 자체 내에서 IPython.hooks.pre_runcode_hook을 사용하여 이것을 해결하는 것이 더 멋지지 않습니까?

import os 
import IPython 
ip = IPython.ipapi.get() 

def runMyFile(self): 
    ip.magic('%run myFile.py') 
    raise IPython.ipapi.TryNext() 

ip.set_hook('pre_runcode_hook', runMyFile) 
+0

감사합니다. –

2

나는 우아한 방법을 찾을 수 없습니다. 이것은 추한 방법입니다. 실행 :

rlwrap awk '{print "%run myfile.py"} {print} {fflush()}' |ipython 

이것은 STDIN에서 읽지 만, 각 명령 앞에 원하는 명령을 인쇄합니다. fflush은 버퍼링을 비활성화하고 ipython에 즉시 전달합니다. rlwrap 거기에 readline 바인딩을 유지해야합니다. 당신은 그것을 가지고 있지 않으면 그것을 제거 할 수 있지만, 덜 편리 할 것입니다 (화살표 키 등은 없습니다).

ipython 프롬프트가 나타나기 전에 명령을 입력해야한다는 점을 기억하십시오. 다른 더 성가신 일이있을 수 있습니다, 나는 철저하게 테스트하지 않았습니다.

관련 문제