Просмотр escape-символов при нажатии клавиш со стрелками в оболочке Python - PullRequest
160 голосов
/ 21 мая 2009

В оболочках, таких как интерактивная оболочка python, вы обычно можете использовать клавиши со стрелками для перемещения по текущей строке или для получения предыдущих команд (со стрелкой вверх) и т. Д.

Но после того, как я запустил ssh на другую машину и запустил там python, я получил сеансы вроде:

>>> import os 
>>> ^[[A    

где последний символ идет от стрелки вверх. Или, используя стрелку влево:

>>> impor^[[D

Как я могу это исправить?

В обычном bash клавиши со стрелками работают нормально. Странное поведение только в интерактивной оболочке python (или perl и т. Д.).

Ответы [ 20 ]

86 голосов
/ 14 октября 2014

Я решил эту проблему, установив пакет readline:

pip install readline
61 голосов
/ 10 января 2017

В OS X у меня другая проблема.

Когда я использую системную оболочку Python, ключи не проблема, а проблема в virtualenv. Я бы попробовал переустановить / обновить virtualenv / readline, но ничего не исправлено.

Пока я пытаюсь import readline в проблемной оболочке python, получим это сообщение об ошибке:

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

Потому что есть /usr/local/opt/readline/lib/libreadline.7.dylib, но нет libreadline.6.dylib, поэтому я делаю символьную ссылку:

ln -s libreadline.7.dylib libreadline.6.dylib

Проблема была решена!

46 голосов
/ 25 октября 2016

В OS X обновления Xcode иногда прерываются readline. Решение:

brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline

Если проблема не устранена, попробуйте удалить readline с помощью pip и установить его с помощью easy_install:

pip3 uninstall readline
easy_install readline
31 голосов
/ 21 мая 2009

Похоже, readline не включен. Проверьте, определена ли переменная PYTHONSTARTUP, для меня она указывает на /etc/pythonstart и этот файл выполняется процессом python перед переходом в интерактивный режим, который настраивает readline / обработку истории.

Благодаря @chown вот документы по этому вопросу: http://docs.python.org/2/tutorial/interactive.html

19 голосов
/ 27 мая 2017

В OS X, используя python 3.5 и virtualenv

$ pip install gnureadline

В переводчике сделать:

import gnureadline

Теперь клавиши со стрелками должны работать правильно.


Дополнительная информация ...

Обратите внимание, что по состоянию на 1 октября 2015 г. - readline был УСТАРЕЛ (источник https://github.com/ludwigschwardt/python-readline)

Вместо этого используйте gnureadline (см .: https://github.com/ludwigschwardt/python-gnureadline)

Если я устанавливаю readline вместо gnureadline, используя python 3.5, я получаю ошибки после попытки импорта в интерпретаторе:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found
15 голосов
/ 11 мая 2010
  1. установить пакет readline-devel.
  2. перекомпилировать python с модулем readline
  3. Бинго!
10 голосов
/ 30 июня 2013

Вот шаги, которые работали для меня в Ubuntu 12.04 для Python 3.3.

1) открыть терминал и написать sudo apt-get install libreadline-dev

2) скачать исходный файл python 3.3.2 с http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz

3) распакуйте его и перейдите в каталог Python-3.3.2 / в оболочке

4) выполнить следующую команду:

./configure
make
make test
sudo make install
8 голосов
/ 21 мая 2018

У меня были проблемы с историей оболочки (команды табуляции / стрелок) Python 3.6.x в Ubuntu 16.04 LTS.

Python 3.6.x был установлен из источника.

Что для меня решено, так это установить модуль "gnureadline", как сказал user12345, используя эту командную строку:

sudo pip3.6 install gnureadline

:)

7 голосов
/ 10 октября 2017

Был затронут после обновления Mac до High Sierra, это успешно решило его для меня:

brew unlink python
xcode-select --install
brew install python
6 голосов
/ 11 марта 2019

Я недавно столкнулся с этой проблемой, и после прочтения большого количества статей о pip install readline (не работает для Mac OSX) и pip install gnureadline, и меня это не устраивает, теперь это моя установка, которая позволяет использовать клавиши со стрелками в любой консоли Python :

  1. установить gnureadline, используя pip install gnureadline

теперь вы можете сделать import gnureadline, и клавиши со стрелками должны работать как положено. Чтобы они работали автоматически, выполните следующие действия:

  1. создать (или добавить) файл ~/.startup.py: import gnureadline
  2. добавить в файл ~/.bash_profile: export PYTHONSTARTUP=~/.startup.py

Одна вещь, которая не работает, но работала в моей предыдущей установке: автоматический импорт gnureadline на pdb.set_trace(). Если у кого-то есть хорошее решение этой проблемы, я был бы благодарен за комментарий.

...