在Linux中,当用户按下某些键盘热键时,我需要打印终端程序状态。
由于 Ctrl+T 在 Linux 上不可用(仅在 BSD 上可用),所以我决定使用 Ctrl+Z 来代替。
我在程序中处理 SIGTSTP 信号,并且工作正常。 一个副作用是,当用户按下
Ctrl+Z 时,会出现字符
^Z
。
^Z
打印输出可以消除吗?
这是一个终端设置,而不是 shell 设置 - 与问题的声明相反,shell 没有执行不需要的打印。
您可以使用
stty -echoctl
或通过 Python 禁用它:
import termios, sys
with open('/dev/tty', 'r+') as tty_file:
tty_fd = tty_file.fileno()
settings = termios.tcgetattr(tty_fd)
settings[3] &= ~ termios.ECHOCTL
termios.tcsetattr(tty_fd, termios.TCSADRAIN, settings)
您需要添加一些异常处理,以便在您的进程没有 /dev/tty
可用时正常恢复。