IPython 5 사용시 이상한 쉘 출력


37

방금 최신 버전의 IPython으로 업그레이드했으며 emacs에서 사용할 때 문제가 있습니다.

일반 터미널에서 사용하면 색상 (색상, 탭 완성 등)에서 잘 작동하지만 출력 대신 M-x eshell또는 M-x shell에서 In [1]:실제로 출력 [?12l[?25h하고로 Out[1]출력됩니다 [J[?7h[?12l[?25h[?2004l[?7hOut[1]:.

어쩌면 IPython에서 사용하는 emacs에서는 사용할 수없는 터미널의 일부 기능 일지 모르지만 어떤 기능인지 알고 싶습니다.

Terminal.app :

In [1]: 2+2
Out[1]: 4

이맥스

[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4

버그 업스트림을 열었습니까? 나는 아무것도 찾을 수 없었지만 Gmane을 재 작업 한 ATM을 검색하는 것도 약간 어렵습니다.
rasmus

2
참고로 업스트림 버그는 # 25306
npostavs

답변:


41

IPython 5에는 Emacs의 하위 쉘과 호환되지 않는 새로운 터미널 인터페이스가 있습니다. 이를 수정하려면 --simple-promptIPython 명령에 플래그를 추가하십시오 .

(setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "--simple-prompt -i")

설명서에서 :

새로운 인터페이스는 Emacs의 '열등한 쉘'기능과 호환되지 않습니다. 이를 계속 사용하려면 --simple-prompt플래그를 Emacs runs 명령에 추가하십시오 . 이 플래그는 대부분의 IPython 기능을 비활성화하며 Emacs를 사용하여 탭 완성과 같은 기능을 제공합니다.

참조 : http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1


6
그렇습니다. 처음에는 그랬지만 멀티 라인 지원 (함수 정의에 가장 중요)이 없기 때문에 ipython 4로 되돌아갔습니다. ipython 5는 Mx 용어와 함께 잘 작동하지만 주목해야합니다.
리터럴

3
이 플래그를 설정하는 것은 변수를 통해 Elpy에서 여전히 매우 유용합니다 python-shell-interpreter-args. Elpy를 사용해 보지 않았다면 확인하십시오. 함수 정의를 별도의 버퍼에 작성하고 하나의 명령으로 해석기에 쉽게 전달할 수 있습니다. 이 경우, 모든 Emacs의 편집 명령을 사용하고 양방향 세계에서 가장 좋은 대화식 세션을 얻을 수 있습니다.
Ricardo Lima

1
@Literal이 링크에 작성된 이유 : IPython 5 에서 사용 readline으로 변경되었습니다 .Emacs 쉘과 호환되지 않습니다. 이맥과는 다르게 작동합니다 : 아는 한, 쉘은 더 유사한 작업을 목적으로 바보 터미널을 실행합니다. 표준 Emacs 버퍼 인 반면 실제 전체 터미널 에뮬레이터를 실행합니다. 쉘은와 호환 가능 하지만 호환 되지 않는 것 같습니다 . 이스케이프 시퀀스를 보여주는 프롬프트를 설명합니다. 전체 터미널을 실행하기 때문에 이스케이프 시퀀스를 올바르게 해석합니다. prompt_toolkitprompt_toolkittermtermreadlineprompt_toolkitterm
Ricardo Lima

1
다른 기능을 유지하고 싶었을 것이므로 더 많은 기능을 가진 다른 쉘 모드를 사용했기 때문에 동의하지 않았습니다. 그러나 나는 그것과 함께 살아야 할 것 같아요.
리터럴

1
@CodyChan 완성, 색상 등 UI와 관련된 IPython 기능을 비활성화합니다. % magic 명령, 입력 / 출력 기록,! shell 명령,? help 명령 등을 유지합니다.
jpkotta

0

--simply-prompt를 사용하지 않고 emacs 쉘에서 IPython을 여는 방법이 있습니다

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

그 후, 디스플레이 문제없이 emacs 쉘에서 직접 ipython을 열 수 있습니다.

내 경우에는 한 가지 더 문제가 있습니다. 어떤 이유로 든 표시가 올바르게 된 후에도 여전히 일부 멀티 라인 클래스 정의를 emacs 쉘의 ipython에 직접 복사하여 붙여 넣을 수 없었습니다. 내 현재 솔루션은 Ipython % paste 명령을 사용하는 것입니다. 더 나은 접근 방법이 있으면 알려주십시오.

추신 : 우분투 16.04를 사용하고 있습니다. 누군가 MacOS를 사용하면 IPython을 깨뜨립니다.



그것은 ipython 설치를 손상시킵니다
Diogo

어떤 식으로? 그것은 나를 위해 잘 작동
DataHungry

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.