Po uruchomieniu replika python (2.7.10) w terminalu os-x i wyjściu, terminal nie wpisuje już echa danych wejściowych i zdarzają się inne dziwne rzeczy. Jeśli uruchomię python
ponownie exit()
, a terminal wydaje się być przywrócony. Teraz tylko zamykam kartę i otwieram nową, więc nie testowałem tego dokładnie.
Wydaje mi się, że jest to związane z ustawieniami terminali, ale jest to ostatnia rzecz i nie zmieniłem niczego, co pamiętam. Python jest instalowany macports
, jeśli istnieje coś wspólnego z niepasującymi zależnościami z biblioteką konsoli. 2.7.10 został zainstalowany jakiś czas temu i nie stało się to po instalacji.
Pęka kłykcie i otwiera się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`
Ponadto ponowne uruchomienie Pythona i naciśnięcie ctrl-d
powoduje wyświetlenie tych danych wyjściowych:
>>> ^D (ctrl-d, then hit enter, doesn't exit)
>>> ^D (...)
>>> ^D (...)
>>> exit() (typing exit() quits the session)
>>> [~]:
python
a potemctrl-d
Odpowiedzi:
W MacPorts występuje otwarty błąd dotyczący tego problemu:
https://trac.macports.org/ticket/48807
Mówi, że instalacja Pythona z opcją „+ readline” rozwiązuje problem, który zweryfikowałem, robiąc to sam.
źródło
sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline
. Jeśli Twoje drzewo lokalne jest nieaktualne, nie będzie dostępny wariant + readline;selfupdate
będzie naprawić.Tryby terminalu są ustawiane przez aplikację na raw lub cbreak, a przy nieprawidłowym wychodzeniu tryby nie są przywracane. W szczególności funkcja odwzorowująca Enterklucz (control / M aka return karetki) na nową linię (control / J aka line feed) jest często w tym przypadku wyłączona. Możesz rozwiązać problem ze zwrotami, wprowadzając
śledzony przez controlJ
Pozwoli to przynajmniej na ponowne wprowadzenie poleceń, chociaż znaki edycyjne, takie jak, backspacemogą nie zostać przypisane do ich zwykłych funkcji.
Niektórzy mogą również zalecić użycie
reset
polecenia, ale podane objawy nie są istotne dla tego, co robi ten program.Do dalszego czytania
stty
stroną podręcznika jest GNUźródło
stty echo
wydaje się rozwiązać problem ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Nie jestem pewien, czy to wszystko załatwi. Myślę, że coś jest trochę nie tak z moim pythonem, ponieważ błędy składniowe wymagają ode mnie ręcznego naciśnięcia nowego wiersza, aby zacząć wprowadzać nowe polecenie, i nie powinno tak być.To zadziałało dla mnie (przy użyciu OSX i pyenv):
Źródło: https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l
źródło