caracteres TTY misturados após o uso do dispositivo cat ou impressão em Python

2

Então, quando eu cat /dev/input/mouse0 em um TTY, movo o mouse um pouco e, em seguida, ctrl-z para parar cat , meus caracteres de terminal estão todos bagunçados. Quase todos os personagens são trocados por outro personagem no conjunto de caracteres ASCII. Esta mesma situação ocorre quando eu executo isso no Python 3.2:

print('3[1;12mTest.3[1;m')

O mesmo sintoma não aparece em um shell na GUI, apenas nos terminais virtuais. O problema não desaparece se eu sair. Eu suspeito que um certo código de escape (que pode estar contido dentro do código Python) é remapear os códigos de byte ASCII para as representações de caracteres, mas isso é apenas um palpite. O que está acontecendo e como posso desfazer isso?

    
por fouric 14.04.2012 / 02:22

2 respostas

5

Eu finalmente encontrei o comando que estava procurando no Command Line Fu . O comando é reset . Eu tentei, e funcionou perfeitamente, sem sair ou reiniciar o sistema.

    
por fouric 04.06.2012 / 20:02
2

Ao enviar arquivos binários para o terminal, como seu cat /dev/input/mouse0 , você pode enviar QUALQUER caractere. Isso pode confundir o terminal virtual.

A sequência de caracteres ESC [ introduz uma "sequência de controle VT100" (compatibilidade com um antigo keypunch de vidro). Outros caracteres como ^ Q , ^ S , ^ N , ^ O fazem coisas mágicas com base na compatibilidade com o Modelo 35 Teletipos com leitor de fita de papel / punção.

Quando estou tentando des-confundir um terminal, eu faço:

A saída está congelada? Digite ^ Q (ctrl-Q) (o caractere XON, para iniciar o leitor de fita de papel).

Digite o comando stty sane . Se não houver caracteres ecoados enquanto você digita, stty echo restaurará o eco.

Leia man stty e você verá como salvar um conjunto de configurações de terminal e restaurá-las depois!

BTW, parar um programa usa crtl-C para interromper um programa. Ctrl-Z apenas interrompe o programa, em preparação para colocá-lo em segundo plano. Alguns programas capturam ^ C e fazem algumas limpezas, salvamentos de arquivo, etc, etc. Se você acabou de ^ Z e executou outra coisa, essa limpeza não foi feita.

    
por waltinator 14.04.2012 / 02:54