当我在程序中处理SIGTSTP(Ctrl-Z)时,我可以阻止打印“^Z”吗?

问题描述 投票:0回答:1

在Linux中,当用户按下某些键盘热键时,我需要打印终端程序状态。

由于 Ctrl+T 在 Linux 上不可用(仅在 BSD 上可用),所以我决定使用 Ctrl+Z 来代替。

我在程序中处理 SIGTSTP 信号,并且工作正常。 一个副作用是,当用户按下

Ctrl
+Z 时,会出现字符 ^Z

^Z
打印输出可以消除吗?

python terminal
1个回答
2
投票

这是一个终端设置,而不是 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 可用时正常恢复。

    

© www.soinside.com 2019 - 2024. All rights reserved.