2017-09-04 4 views
0

IPython 대화 형 셸을 감싸는 사용자 지정 셸을 만들고 싶습니다. 그것은 IPython 셸이 가지고있는 대부분의 것들을 가지고 있어야하며, 그 위에 IPython 셸로 들어가기 전에 "dance"나 "knock knock"과 같은 커스텀 커맨드를 전처리하고 싶습니다. ...IPython 셸의 래퍼 작성 방법은 무엇입니까?

바로 여기에 내가하려고하는 일을 나는 주위를보고 그것을 할 수있는 몇 가지 방법을 시도

>>> print("IPython will handle this") 
"IPython will handle this" 
>>> dance 
"I will handle this myself" 

,하지만 난 정말 확실하지 않다 : 같은

는 시각적으로해야 같습니다 :

  1. 하위 클래스 IPython.kernel 또는 이와 비슷한 것. 내가 필요로하는 것이 더 복잡해 보이고 아무런 성공없이 시도했다. (실제로 무엇을하는지 이해할 수 없다.)
  2. IPython.get_ipython()을 사용하여 대화 형 IPython 쉘의 인스턴스를 가져 와서 핑퐁으로 가져온다. . 이 문서에서는 도움이되는 문서를 찾을 수 없습니다. 내가 발견 한 run_cell() 함수는 유용 할 수 있지만 run_cell("for i in range(10):")과 같은 일을 할 수없고 들여 쓰기 된 다음 줄을 기다립니다. 그것은 단순히 던졌습니다.
  3. Popen을 사용하면 IPython 세션을 열고 핑퐁을 실행할 수 있습니다. 나는 파이프로 작업하는 것에 대한 튜토리얼을 거의 따라 가지 못했지만 파이프가 깨지거나 유선이 생겼다. 내가 깊이 들여다보기 전에 내 OS 클래스를 반드시 리뷰 할 필요가있다.

나는 올바른 방법이 무엇인지 잘 모르겠습니다. SageMath는 비슷한 일을하지만 실제로 소스 코드를 잘 이해할 수는 없다는 것을 기억합니다.

모든 의견은 도움이 될 것입니다. 미리 감사드립니다 :)

답변

1

파이썬으로 전처리를합니까? 그렇다면 inputtransformers을보고 싶습니다. 사용자 입력을 원하는대로 변형 할 수 있습니다. 이것은 마법이 작동하는 방법입니다. 할 일의 종류에 따라 다양한 수준의 입력 변형이 있습니다.

가변 섀도우 마술을 사용하지 않고 dance이라는 마술을 정의하면 구문 오류 대신 In[1]: dance이 마술 코드를 트리거하므로 사용자 지정 구문 변환기보다 훨씬 쉽습니다. 당신의 경우 마법 이름 knockdance이면 충분합니다. 마법의 앞에있는 %은 어떤 경우에만 모호성을 나타 내기 위해 필요하며 다른 경우 불필요합니다. 즉, cd, ls, pwd ...은 IPython에서 작동합니다 (기술적으로는 별칭이지만 기술적 구분은 여기에서 관련이 없습니다). Here은 맞춤식 마법을 정의하는 방법입니다.

실제로 덮어 써야하는 경우 TerminalInteractiveShell을 서브 클래스 화해야하며 IPython에 this option을 통해 사용자 정의 클래스로 바꿔달라고 할 수 있습니다. 일단 터미널로 작업하게되면 커널로 만들기가 쉬워야하지만, IPykernel로 저글링을해야하기 때문에, 첫 단계로 복잡해집니다.