如何让readline在阿尔卑斯山与python一起工作



当我在运行alpine分发的Docker容器中apk add python3时,像Ctrl <left arrow>这样的组合键,而不是将光标移动整个单词,打印这样的东西(在这里,我键入了"垃圾邮件蛋",然后按住控制键并点击左箭头键):

Python 3.5.1 (default, Dec  9 2015, 14:41:32) 
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> spam ham;5D

仅仅用apk addreadlinepip3 install本身并不能解决问题。

如何让readline在这种环境中使用python?

看起来关键是让readline正常工作,但您可能也必须正确处理TERM。

我试过这样的Dockerfile:

FROM alpine
RUN apk update && 
  apk add python3 python3-dev build-base ncurses-dev bash && 
  python3 -m ensurepip && 
  pip3 install readline
COPY ./inputrc /etc/inputrc

使用来自的inputrchttps://github.com/frol/docker-alpine-env/blob/master/etc/inputrc,复制如下:

# do not bell on tab-completion
#set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
$if mode=emacs
# for linux console and RH/Debian xterm
"e[1~": beginning-of-line
"e[4~": end-of-line
"e[5~": beginning-of-history
"e[6~": end-of-history
"e[7~": beginning-of-line
"e[3~": delete-char
"e[2~": quoted-insert
"e[5C": forward-word
"e[5D": backward-word
"ee[C": forward-word
"ee[D": backward-word
"e[1;5C": forward-word
"e[1;5D": backward-word
# for rxvt
"e[8~": end-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"eOH": beginning-of-line
"eOF": end-of-line
# for freebsd console
"e[H": beginning-of-line
"e[F": end-of-line
$endif

以下是我从收集这些信息的几个链接

  • 在python shell中按箭头键时看到转义字符
  • https://docs.python.org/2/tutorial/interactive.html
  • 按下CTRL键在单词/字符串之间移动光标

注意-我知道安装bash似乎很愚蠢,但如果没有它,pip3 install readline就会失败。同样,必须安装gcc等也不理想,尽管如果需要,可以通过apk del做一些事情来清理。

有了所有这些,它在我的mac上工作,但在油灰上没有立即工作,尽管我怀疑这只是TERM设置,YMMV。

相关内容

  • 没有找到相关文章

最新更新