Терминал OS-X ведет себя странно после интерактивного запуска Python

11

После запуска python repl (2.7.10) в терминале os-x и выхода из него терминал больше не выводит ввод с клавиатуры, и происходят некоторые другие странные вещи. Если я pythonснова запускаю и exit(), то, кажется, терминал восстанавливается. Теперь я просто закрываю вкладку и открываю новую, так что я не проверял это подробно.

Я думаю, это связано с настройками терминала, но это недавняя вещь, и я ничего не изменил, что я помню. Python устанавливается macports, если есть какое-то отношение к несовпадающим зависимостям с какой-либо консольной библиотекой. 2.7.10 была установлена ​​некоторое время назад, а после установки этого не произошло.

Трескает костяшки и открываетterminal

[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>>       *(press ctrl-d, the 2nd >>> is strange)
[~]:            *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`

Кроме того, снова запустив python и получив ctrl-dрезультаты, вы получите:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 
Эндрю Бакер
источник
Почему вы устанавливаете Python через macports? Python v2.7.10 включен в El Cap, и я думаю, что Yosemite ... Есть ли что-то особенное, что вы получаете от Mac Ports?
Бенджамин Schollnick
Ну, используя 2.7. что-то большее, чем то, что было поставлено с Mac. Не касаясь системного python (стандартная проблема в unixes), запуск 2.7 с скомпилированными пользовательскими параметрами ГИС, с пакетом mgmt для них, а также с 3.4 одновременно. Но настоящая причина, по которой вы должны это сделать, - не связываться с системным питоном.
Эндрю Бакер
Приложение Python выполняет какое-либо управление окнами? (Например, используя Curses, NCurses и т. д.)
Бенджамин Шолльник
Там нет приложения, просто набрав, pythonа затемctrl-d
Эндрю Бакер

Ответы:

12

Существует открытая ошибка в MacPorts по этому вопросу:

https://trac.macports.org/ticket/48807

В нем говорится, что установка python с опцией «+ readline» решает проблему, которую я сам проверил.

sudo port uninstall python27
sudo port install python27 +readline
Б. Бич
источник
9
Черт, спасибо, что нашли сообщение об ошибке. FWIW, невозможно удалить python27 (как правило, от него зависит слишком много пакетов), поэтому вам следует перестроить его. Беги sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline. Если ваше локальное дерево устарело, у него не будет варианта + readline; это selfupdateисправит.
Эндрю Бакер
8

Режимы терминала устанавливаются вашим приложением на raw или cbreak, и при ненормальном выходе режимы не восстанавливаются. В частности, функция, которая отображает Enterключ (control / M aka возврат каретки) на новую строку (control / J aka перевод строки), часто отключается в этом случае. Вы можете решить проблему с возвратами, введя

stty sane

с последующим controlJ

Это, по крайней мере, позволит вам снова вводить команды, хотя символы редактирования, такие как, backspaceмогут не назначаться их обычным функциям.

Некоторые могут также посоветовать использовать resetкоманду, но указанные симптомы не имеют отношения к тому, что делает эта программа.

Для дальнейшего чтения

Томас Дики
источник
stty echoкажется, чтобы решить проблему ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Не уверен, что обо всем позаботится. Я думаю, что-то не так с моим питоном, поскольку синтаксические ошибки требуют, чтобы я вручную нажимал на новую строку, чтобы начать ввод новой команды, и это не должно быть так.
Эндрю Бакер
Хотя это не решает проблему, это по крайней мере позволяет мне исправить это после факта. Это достаточно хорошо для меня, пока. Если есть какой-нибудь способ узнать, почему это происходит, я бы хотел знать.
Эндрю Бакер
1

Это сработало для меня (с использованием OSX и pyenv):

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 2.7.11

Источник: https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l

Джо Иннер
источник