O terminal OS-X se comporta de maneira estranha após executar o Python interativamente

11

Depois de executar um python repl (2.7.10) no terminal os-x e sair, o terminal não faz mais eco da entrada digitada e outras coisas estranhas acontecem. Se eu correr pythonnovamente e exit(), o terminal parece ter sido restaurado. Agora, apenas fecho a aba e abro uma nova, portanto não a testei extensivamente.

Acho que isso está relacionado às configurações do terminal, mas é uma coisa recente e não mudei nada do que me lembro. O Python é instalado com macports, se houver algo a ver com dependências incompatíveis com alguma biblioteca de console. 2.7.10 foi instalado há um tempo atrás, e isso não aconteceu após a instalação.

Racha juntas e abreterminal

[~]: 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`

Além disso, executando o python novamente e atingindo os ctrl-dresultados nesta saída:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 
Andrew Backer
fonte
Por que você está instalando o Python via macports? O Python v2.7.10 está incluído no El Cap, e acho que Yosemite ... Existe algo em particular que você está obtendo das portas Mac?
Benjamin Schollnick
Bem, usando 2.7.qualquer coisa maior do que o que foi enviado com o mac. Não tocando no python do sistema (problema padrão nos unixes), executando o 2.7 com opções GIS personalizadas compiladas, com o pacote mgmt para eles e o 3.4 ao mesmo tempo. Mas o verdadeiro motivo para você fazer isso é não fsck com o python do sistema.
Andrew Backer
O aplicativo python está executando algum tipo de gerenciamento de janelas? (por exemplo, usando pragas, NCurses, etc.)
Benjamin Schollnick
Não há nenhum aplicativo, apenas digitando pythone depoisctrl-d
Andrew Backer

Respostas:

12

Há um bug aberto no MacPorts sobre esse problema:

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

Ele diz que a instalação do python com a opção "+ readline" corrige o problema, que eu verifiquei fazendo isso sozinho.

sudo port uninstall python27
sudo port install python27 +readline
B. Praia
fonte
9
Porra, obrigado por encontrar esse relatório de bug. FWIW, não é possível desinstalar o python27 (normalmente, muitos pacotes dependem dele); portanto, você deve reconstruir. Corra sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline. Se sua árvore local estiver desatualizada, ela não terá a variante + linha de leitura disponível; o selfupdatevai consertar isso.
Andrew Backer
8

Os modos de terminal são definidos pelo seu aplicativo como brutos ou rupturas e, ao sair de forma anormal, os modos não são restaurados. Em particular, o recurso que mapeia a Enterchave (controle / M, também conhecido como retorno de carro) para a nova linha (controle / J, também conhecido como avanço de linha) geralmente é desativado nesse caso. Você pode corrigir o problema com devoluções digitando

stty sane

Seguido por controlJ

Isso permitirá ao menos que você insira comandos novamente, embora os caracteres de edição, como os que backspacepodem não estar atribuídos às suas funções habituais.

Alguns também podem aconselhar o uso do resetcomando, mas os sintomas apresentados não são relevantes para o que esse programa faz.

Para leitura adicional

Thomas Dickey
fonte
stty echoparece corrigir o problema ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Não tenho certeza se ele cuida de tudo. Acho que há algo de errado com meu python, pois os erros de sintaxe exigem que eu pressione manualmente a nova linha para começar a digitar um novo comando, e não deve ser assim.
quer
Embora isso não resolva o problema, pelo menos me permite corrigi-lo após o fato. Isso é bom o suficiente para mim, por enquanto. Se existe alguma maneira de descobrir por que isso está acontecendo, eu adoraria saber.
Andrew Backer 10/10