Грязный код при использовании emacs ipython Inferior Python

Я использую новейший emacs25.1.1 с новейшим archlinux.

Тем не менее, когда я редактирую скрипты Python и отправляю его в нижний ipython с помощью Ctrl-Enter, нижний Python показывает мне уродливый беспорядочный указатель термина, как:

Python 3.5.2 (default, Nov  7 2016, 11:31:36) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

[JIn [1]: import numpy as np[26D
[J
[6n[JIn [2]: [8D[8C[8D[J[6n[JIn [2]: [8D[8C

Когда нажмите Enter в этом нижнем питоне, он показывает:

error in process filter: Args out of range: "
^[[6n^[[0m^[[0m^[[J^[[0;38;5;28mIn [^[[0;38;5;28m: ^[[8D^[[8C[[0m^[[0m", 128

Я изменяю локаль Emacs из:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

Для того, чтобы:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

с помощью команды $"export LANGUAGE="en_US:en" && emacs"$, нет помощи в устранении грязного кода.

Я также пробую python-mode.et или пакет elpy в emacs, все они показывают один и тот же грязный код терминала.

Далее tried python2.7 тоже пробовал, без работы:

Python 2.7.12 (default, Nov  7 2016, 11:55:55) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

[JIn [1]: import numpy as np[26D
[J
[6n[JIn [2]: [8D[8C[8D[J[6n[JIn [2]: [8D[8C

Это новейшая проблема ipython?

Наконец сообщение в emacs вставьте сюда:

error in process filter: ansi-color-filter-apply: Args out of range: "Python 3.5.2 (default, Nov  7 2016, 11:31:36) 
Type \"copyright\", \"credits\" or \"license\" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

[6n[0m
[0m[J
[0m", 408
error in process filter: Args out of range: "Python 3.5.2 (default, Nov  7 2016, 11:31:36) 
Type \"copyright\", \"credits\" or \"license\" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

[6n[0m
[0m[J
[0m", 408
error in process filter: ansi-color-filter-apply: Args out of range: "[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m1[0;38;5;28m]: [0;38;5;28;1mimport[0m [0;38;5;32;1mnumpy[0m [0;38;5;28;1mas[0m [0;38;5;32;1mnp[26D[0m
[J[0m", 177
error in process filter: Args out of range: "[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m1[0;38;5;28m]: [0;38;5;28;1mimport[0m [0;38;5;32;1mnumpy[0m [0;38;5;28;1mas[0m [0;38;5;32;1mnp[26D[0m
[J[0m", 177
error in process sentinel: elpy-rpc--default-error-callback: peculiar error: "exited abnormally with code 1"
error in process sentinel: peculiar error: "exited abnormally with code 1"
error in process filter: ansi-color-filter-apply: Args out of range: #("[JIn [1]: import numpy as np[26D
[J


[6n[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m2[0;38;5;28m]: [8D[8C[0m[0m[8D[J[0m[6n[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m2[0;38;5;28m]: [8D[8C[0m" 0 38 (fontified nil) 38 39 (fontified nil)), 283
error in process filter: Args out of range: #("[JIn [1]: import numpy as np[26D
[J


[6n[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m2[0;38;5;28m]: [8D[8C[0m[0m[8D[J[0m[6n[0m[0m[J[0;38;5;28mIn [[0;38;5;10;1m2[0;38;5;28m]: [8D[8C[0m" 0 38 (fontified nil) 38 39 (fontified nil)), 283

2 ответа

Я использовал рекомендации с https://github.com/jorgenschaefer/elpy/issues/992. Короче - добавьте следующий код:(setenv "IPY_TEST_SIMPLE_PROMPT" "1") в конфигурационный файл emacs.

Из вывода и сообщения об ошибке может показаться, что по какой-то причине ваша установка не обрабатывает escape-последовательности ANSI, используемые ipython. Предполагая, что вы используете режим pythong, убедитесь, что у вас есть следующее

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

Чтобы исключить другие возможные настройки в вашем файле инициализации, я бы закомментировал все, кроме вышеперечисленного, и повторил попытку. Если это работает, то в вашей настройке есть что-то, что мешает emacs обрабатывать управляющие последовательности ANSI, выводимые ipython. Если это все еще не работает, то вам, возможно, потребуется зарегистрировать отчет об ошибке.

Есть также несколько вещей, которые вы можете сделать, чтобы обойти эту проблему.

  1. Попробуйте добавить ключ --no-color-info в ipython. Это уменьшит количество выводимых управляющих символов ipython, что может ограничить проблему.
  2. Подумайте об использовании только python, а не ipython в качестве низшего процесса. Проблема, с которой вы сталкиваетесь, связана с тем, что ipython использует управляющие символы ansi для создания более удобной оболочки. Тем не менее, emacs - это действительно ваша оболочка, и вам может быть лучше позволить emacs позаботиться об интерфейсе и просто использовать более простую подчиненную оболочку
  3. В Emacs Wiki есть довольно подробное описание того, как настроить мощную среду разработки Python. Использование простого процесса подчиненного ipython / python является наиболее простым подходом. Вы можете лучше потратить время на другие пакеты, чтобы получить более полную среду разработки.
Другие вопросы по тегам