【问题标题】:How do I stop Linux from writing key inputs to the terminal while my python script is running?如何在我的 python 脚本运行时阻止 Linux 将关键输入写入终端?
【发布时间】:2021-04-22 21:21:39
【问题描述】:

我正在使用 python 3,每当我执行以下 python 脚本时:

import time

while (True):
    print("-test-")
    time.sleep(1)

在我的 linux 终端上。只要终端聚焦,每次击键(如第三行中的“asdf”)都会打印到终端:

-test-
-test-
asdf-test-
-test-

有没有办法在我的 python 脚本运行时阻止终端输出击键(最好不更改操作系统或终端本身的配置)?

更具体地说,我想使用“pynput”来读取键盘事件,而不会出现在我的输出中:

from pynput import keyboard
import time

def key_pressed(key):
    print("key {0} pressed".format(key))

if __name__ == "__main__":
    listener = keyboard.Listener(on_press=key_pressed)
    listener.start()
    while(True):
        print("-test-")
        time.sleep(1)

会输出:

-test-
-test-
akey 'a' pressed
-test-

当在第二个print("-test-") 之后按下键“a”而不是:

-test-
-test-
key 'a' pressed
-test-

我发现了这个:

How to prevent shell from getting input (keyboard) while running a python script?

链接到:

How do I 'lock the keyboard' to prevent any more keypresses being sent on X11/Linux/Gnome?

据我所知,这并不是我想要的,因为他们试图完全阻止键盘输入。我只想在运行脚本的终端上阻止它。

【问题讨论】:

    标签: python linux


    【解决方案1】:

    您的击键不会被打印出来。你写入终端。只需取消对终端窗口的关注,它就可以正常工作。如果窗口在后台,pynput 也可以工作。

    编辑: 您可以将print("key {0} pressed".format(key)) 替换为print("\bkey {0} pressed".format(key))\b 将退格打印到终端。它会删除您刚刚写入终端的密钥。

    【讨论】:

    • 感谢您的回复,但我找不到在运行脚本时使终端失焦的方法(除了手动聚焦其他内容)。因此,除了我为自己编写的小脚本之外的任何其他内容,恐怕这都不是解决方案。
    • 聚焦另一个窗口有什么问题?
    • 在“windowed-fullscreen”中运行终端时,我没有其他窗口可以切换。
    • 这是有道理的。不过看看我的编辑
    • 再次感谢您,但print("key {0} pressed".format(key)) 只是澄清问题的一个示例,我的实际输出是填充整个终端窗口的 ASCII 符号矩阵。由于所有这些都是针对我想用于其他项目的模块(我可能会与其他人共享),因此我正在寻找更通用的解决方案。我考虑过删除(或覆盖)按键,但是当光标位于窗口末尾以外的任何位置并且每次按键后输入仍会在屏幕上闪烁时,这会有点困难。
    猜你喜欢
    • 2014-02-09
    • 2013-07-21
    • 2018-06-04
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多