Термінал 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?
Бенджамін Шолнік

Ну, використовуючи 2,77що більше, ніж поставлено з Mac. Не торкаючись системного пітона (стандартна проблема на unixes), працює 2.7 із спеціальними GIS-опціями, зібраними в них, з пакетом mgmt для них, а також 3,4 одночасно. Але справжня причина, яку ви повинні це зробити, - це не fsck із системним пітоном.
Ендрю Бекер

Чи працює програма python з будь-яким управлінням вікном? (наприклад, Використання прокльонів, 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 carriage return) у новий рядок (control / J aka feed line), часто відключається в цьому випадку. Ви можете вирішити проблему із поверненням, ввівши

stty sane

слідом за ним controlJ

Принаймні, це дозволить вам знову вводити команди, хоча символи редагування, такі як, backspaceможливо, не призначені для їх звичайних функцій.

Деякі можуть також порадити використовувати resetкоманду, але дані симптоми не стосуються того, що робить ця програма.

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


stty echoсхоже, вирішує проблему ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Не впевнений, чи піклується він про все це. Я думаю, що щось не так з моїм пітоном, оскільки синтаксичні помилки вимагають від мене вручну натиснути новий рядок, щоб почати вводити нову команду, і це не повинно бути таким.
Ендрю Бекер

Хоча це і не виправляє проблему, вона, принаймні, дозволяє мені виправити її після факту. Це досить добре для мене, поки що. Якщо є якийсь спосіб дізнатися, чому це відбувається, я хотів би знати.
Ендрю Беккер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.