В оболочках, таких как интерактивная оболочка python, вы обычно можете использовать клавиши со стрелками для перемещения по текущей строке или для получения предыдущих команд (со стрелкой вверх) и т. Д.
Но после того, как я запустил ssh на другую машину и начал python
там, я получаю сессии вроде:
>>> import os
>>> ^[[A
где последний символ происходит от стрелки вверх. Или, используя стрелку влево:
>>> impor^[[D
Как я могу это исправить?
В обычном bash клавиши со стрелками работают нормально. Странное поведение только в интерактивной оболочке python (или perl и т. Д.).
python
shell
ssh
arrow-keys
Фрэнк
источник
источник
Ответы:
Похоже, readline не включен. Проверьте, если
PYTHONSTARTUP
переменная определена, для меня это указывает на/etc/pythonstart
и этот файл выполняется процессом python перед переходом в интерактивный режим, который настраивает readline / обработку истории.Благодаря @chown вот документы по этому вопросу: http://docs.python.org/2/tutorial/interactive.html
источник
PYTHONSTARTUP
, нетPYTHONSTART
. Не уверен насчет дистрибутивного/etc/pythonstart
файла.brew reinstall python3
Я решил эту проблему, установив
readline
пакет:источник
libncurses-dev
на своем компьютере с Ubuntu, затем readline установлен правильно.ncurses-devel
на CentOS, а затемreadline
установлено без проблем. Интерактивная оболочка теперь работает.pip install readline
на моем компьютере с OS X, каждый раз происходит сбой даже после успешного выполненияbrew install readline
gnureadline
вместо этого, см. Stackoverflow.com/q/43013060/2846923На OS X у меня другая проблема.
Когда я использую системную оболочку Python, ключи не проблема, а проблема в virtualenv. Я попытался бы переустановить / обновить virtualenv / readline и ничего не исправлено.
Хотя я пытаюсь
import readline
в проблемной оболочке Python, получить это сообщение об ошибке:Потому что есть,
/usr/local/opt/readline/lib/libreadline.7.dylib
но нетlibreadline.6.dylib
, поэтому я делаю символьную ссылку:Проблема была решена!
источник
brew update && brew upgrade
. Сломал ли это PHP в процессе, еще неизвестно.ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
исправило проблему сканирования кодов, но не вернуло историю возврата команды. Хотя в этом случае половина исправления лучше, чем ничего. (Да, я тоже добавил ссылку на 6, без разницы). Приложение: это была / есть только проблема с python2 для меня. python3 отлично работал без ссылок.На OS X обновления XCode иногда ломаются
readline
. Решение:Если проблема все еще сохраняется, попробуйте удалить
readline
с помощьюpip
и установить его с помощьюeasy_install
:источник
easy_install
опциейeasy_install
работает для меня, в то время как тот, что с pip не работает.brew link readline
(хотя он уже был связан) исправил это для меня.На OS X, используя python 3.5 и virtualenv
В переводчике делаем:
Теперь клавиши со стрелками должны работать правильно.
Дополнительная информация...
Обратите внимание, что по состоянию на 1 октября 2015 г. readline был УСТАРЕЛ (источник https://github.com/ludwigschwardt/python-readline )
Вместо этого используйте gnureadline (см .: https://github.com/ludwigschwardt/python-gnureadline )
Если я устанавливаю readline вместо gnureadline, используя python 3.5, я получаю ошибки после попытки импорта в интерпретатор:
источник
import gnureadline
в начало каждого интерактивного сеанса, который действительно раздражает. Есть ли способ начать это в начале каждого интерактивного сеанса?import gnureadline
. Е. ). Возможные другие идеи также см. В разделе: запустить интерпретатор командной строки python с автоматически загруженным импортомЯ столкнулся с этой проблемой недавно, и после того, как я много читал о
pip install readline
(не работает для Mac OSX) и,pip install gnureadline
будучи неудовлетворенным , теперь это моя установка, которая позволяет использовать клавиши со стрелками в любой консоли Python:pip install gnureadline
Теперь вы можете сделать это,
import gnureadline
и клавиши со стрелками должны работать как положено. Чтобы они работали автоматически, выполните следующие действия:~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
Одна вещь, которая не работает, но работала в моей предыдущей установке: автоматический импорт gnureadline on
pdb.set_trace()
. Если у кого-то есть хорошее решение этой проблемы, я был бы благодарен за комментарий.источник
источник
У меня были проблемы с историей оболочки (команды tab / arrow) Python 3.6.x на Ubuntu 16.04 LTS.
Python 3.6.x был установлен из исходного кода.
Для меня было решено установить модуль "gnureadline", как сказал user12345, используя эту командную строку:
:)
источник
import gnureadline
оболочку, чтобы она заработалаВот шаги, которые работали для меня в 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) выполнить следующую команду:
источник
Это было затронуто после обновления Mac до Высокой Сьерры, это успешно решило это для меня:
источник
На CentOS я исправляю это
yum install readline-devel
а затем перекомпилировать python 3.4.
В OpenSUSE я исправляю это
после ответа Валерио Крини.
Возможно, «pip3 install readline» является общим решением. Не пробовал на моем CentOS.
источник
pip install readline
без перекомпиляции Python, и он работал нормально.Я исправил это, выполнив следующее:
pip install readline
Я столкнулся с другой ошибкой здесь:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
Я исправил это, установив
patch
:yum install patch
После этого мне удалось
pip install readline
успешно запустить, что решило escape-символы в моей оболочке python.К вашему сведению, я использую RedHat
источник
Если вы используете Anaconda Python, вы можете исправить это, запустив:
Работал на меня!
источник
readline
уже установлен, я должен сделать,conda install ncurses
чтобы это работало.Для тех, кто использует conda, установка пакета readline из канала conda-forge решит проблему:
источник
Ни один из этих ответов не работал для меня на двух разных версиях Ubuntu. То, что сработало для меня, но не является правильным решением, это обернуть мой код Python в вызов
rlwrap
(доступен в репозиториях Ubuntu):rlwrap python mycode.py
источник
Вы вызывали ssh с параметром -t, чтобы сказать ssh, чтобы выделить для вас виртуальный терминал?
Со страницы руководства:
Кроме того, вам также может понадобиться правильно установить переменную среды TERM на сервере, как это предлагается в другом посте.
источник
В Mac OS X Mojave 10.14.6 с различными историческими установками через
brew
эту проблему я решил:Скорее всего, нет волшебной пули, поскольку у каждого свой сценарий установки. Я пробовал и выше, так что, возможно, это была комбинация нескольких ответов. По умолчанию Brew установлен на,
python3
поэтому, если вы установилиpython2
пакет, его также необходимо переустановить.источник
Вы пытались использовать другой клиент SSH? Некоторые клиенты SSH имеют специальные встроенные сопоставления клавиш для различных удаленных процессов. Я часто сталкивался с этим с Emacs.
Каким клиентом вы пользуетесь? Я бы порекомендовал попробовать Putty и SecureCRT, чтобы сравнить их поведение.
источник
модуль readline устарел, что приведет к ошибке неверного указателя в последних версиях python при выполнении quit () или exit () в оболочке python.
pip install gnureadline
вместоисточник
Как ваша переменная env $ TERM устанавливает [a], когда все работает нормально, и [b], когда они не работают? Настройки Env часто являются ключом к таким проблемам.
источник
Попробуйте запустить библиотеку кодов ключей на сервере. Если это не работает, попробуйте загрузить библиотеку с возможностью чтения ключа.
источник
Я пытался собрать Python 2.7 на Ubuntu 14.0. Вам понадобится libreadline-dev. Однако, если вы получаете его из apt-get, текущая версия - 6.3, что несовместимо с Python 2.7 (не уверен насчет Python 3). Например, типы данных «Функция» и «CPPFunction», которые были определены в предыдущих версиях readline, были удалены в 6.3, как сообщается здесь:
https://github.com/yyuu/pyenv/issues/126
То есть вам нужно получить исходный код более ранней версии readline. Я установил libreadline 5.2 из библиотеки apt-get для библиотеки и получил исходный код 5.2 для заголовочных файлов. Поместите их в / usr / include.
Наконец проблема была решена.
источник
На MacOsx я исправил это, переустановив readline
источник