设备 cat 或 Python print 后 TTY 字符混淆

设备 cat 或 Python print 后 TTY 字符混淆

因此,当我cat /dev/input/mouse0在 TTY 中移动鼠标一点,然后ctrl-z停止cat时,我的终端字符全都乱了。几乎每个字符都会被替换为 ASCII 字符集中的另一个字符。当我在 Python 3.2 中执行此操作时,也会发生同样的情况:

print('\033[1;12mTest.\033[1;m')

相同的症状不会出现在 GUI 中的 shell 上,只会出现在虚拟终端上。如果我注销,问题不会消失。我怀疑某个转义码(可能包含在 Python 代码中)正在将 ASCII 字节码重新映射到字符表示,但这只是猜测。发生了什么,我该如何撤消它?

答案1

我终于找到了我正在寻找的命令命令行功能。命令是reset。我试过了,完美运行,不用注销,也不用重启系统。

答案2

当将二进制文件输出到终端时,例如cat /dev/input/mouse0,您可以向其发送任何字符。这可能会混淆虚拟终端。

字符串ESC键 [引入了“VT100 控制序列”(与旧玻璃键盘兼容)。其他字符如^Q^S^N^O根据与带有纸带阅读器/打孔器的 Model 35 电传打字机的兼容性来做一些魔术。

当我尝试消除终端混淆时,我会这样做:

输出是否冻结?类型^Q(ctrl-Q)(XON 字符,启动纸带阅读器)。

键入命令stty sane。如果键入时没有回显任何字符,stty echo将恢复回显。

阅读man stty,您将了解如何保存一组终端设置,并在稍后恢复它们!

顺便说一句,停止程序使用crtl-C停止一个程序。Ctrl-Z只是中断程序,准备将其置于后台。有些程序会捕捉^C并在退出时进行一些必要的清理、文件保存等。如果你只是^Z并运行其他程序,这个清理工作就无法完成。

相关内容