4

我正在使用最新的 emacs25.1.1 和最新的 archlinux。

但是,当我编辑 python 脚本并使用 Ctrl-Enter 将其发送到 Inferior ipython 时,劣质 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

在这个 Inferior python 中按 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"$,无法解决混乱的代码。

我还在 emacs 中尝试了 python-mode.et 或 elpy 包,都显示了相同的混乱终端代码。

另外,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
4

2 回答 2

5

我使用了来自https://github.com/jorgenschaefer/elpy/issues/992#issuecomment-249165923的推荐。简而言之 - 将以下代码添加 (setenv "IPY_TEST_SIMPLE_PROMPT" "1")到 emacs 配置文件中。

于 2017-04-26T12:09:18.140 回答
0

从输出和错误消息来看,由于某种原因,您的设置似乎没有处理 ipython 使用的 ansi 转义序列。假设您使用的是 pythong-mode,请确保您具有以下内容

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

为了消除您的 init 文件中的其他可能设置,我将注释掉除上述之外的所有内容,然后重试。如果它有效,那么您的设置中有一些东西会干扰 emacs 处理 ipython 输出的 ansi 控制序列的能力。如果它仍然不起作用,那么您可能需要记录错误报告。

您还可以采取一些措施来解决此问题。

  1. 尝试将 --no-color-info 开关添加到 ipython。这将减少 ipython 输出的控制字符的数量,这限制了问题。
  2. 考虑只使用 python 而不是 ipython 作为劣等进程。您看到的问题是由于 ipython 使用 ansi 控制字符来提供更好的外壳。但是,emacs 确实是您的 shell,您最好让 emacs 处理接口并使用更简单的劣质 shell
  3. Emacs Wiki 对如何设置强大的 python 开发环境有相当详细的描述。使用简单的ipython/python下级进程是最基本的方法。您可能会更好地使用其他一些软件包来获得更完整的开发环境。
于 2016-12-31T01:09:24.613 回答