Подтвердить что ты не робот

История интерактивного режима Python и клавиши со стрелками

Мне было интересно, может ли кто-нибудь объяснить, почему внезапно в интерактивном режиме Python все клавиши со стрелками не работают?

Когда я нажимаю кнопку, например, чтобы пройти через историю команд, я получаю "^ [[A". То же самое с любыми другими клавишами со стрелками.

Я понятия не имею, почему это произошло, и он работал раньше (на OS X Snow Leopard). Кто-нибудь знает способ исправить это?

Большое спасибо,

С

4b9b3361

Ответ 1

Вы не говорите, какой Python вы используете, но упомянутые вами симптомы обычно вызваны тем, что Python не строится с поддержкой readline. В наши дни Python на OS X может быть построен для использования библиотеки GNU readline или поставляемой Apple библиотеки editline (AKA libedit). Вы можете использовать следующие две команды, чтобы показать, какой именно Python вы используете. Если это не поможет вам понять, что происходит, отредактируйте свой вопрос, чтобы показать результат из этих команд.

Вот пример, который показывает недавний MacPorts Python 2.6 на OS X 10.6:

$ python -c 'import sys;print(sys.version);print(sys.executable)'
2.6.5 (r265:79063, Jul 15 2010, 01:53:46) 
[GCC 4.2.1 (Apple Inc. build 5659)]
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python

$ otool -L $(python -c 'import readline; print(readline.__file__)')
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/readline.so:
    /opt/local/lib/libreadline.6.1.dylib (compatibility version 6.0.0, current version 6.1.0)
    /opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)

Префикс пути /opt/local/ - это местоположение по умолчанию для установленного MacPorts, а вывод из otool означает, что этот модуль Python readline динамически связан с установленной GNU readline библиотекой MacPorts.

Ответ 2

Если вы используете доморощенный, это легко исправить:

brew uninstall python
brew uninstall readline
brew install readline  --universal
brew install python

Это исправлено для меня (работает OS X Mavericks 10.9.5)

Ответ 3

Наконец-то я получил эту работу. Мне просто нужно было установить readline с помощью easy_install, а курсоры и backspace начали волшебную работу.

sudo /opt/local/bin/easy_install-2.5 readline

Ответ 4

Такое поведение обычно показывает, когда у вас нет поддержки readline. Если вы используете MacPorts, попробуйте port install readline, посмотрите, не исправит ли он. Вы также можете увидеть эту страницу для дальнейших объяснений.

(Также полезно знать: некоторые программы не используют readline, даже если они присутствуют в системе. Вы можете заставить их использовать их с помощью rlwrap (port install rlwrap). Например: rlwrap ocaml -init code.ml запустится OCaml, прочитайте код .ml и запустите REPL с поддержкой readline)