如何使用Python暂时禁用键盘输入

时间:2015-03-26 22:19:38

标签: python windows python-3.x

我正在使用Python编写一个简单的Windows程序,该程序利用了time模块。具体来说,我使用time.sleep(x)暂停程序一小段时间,通常为0.5-2秒。这基本上就是我正在做的事情:

import time
time.sleep(2)

while True:
    x = input(prompt)
    if x == 'spam':
        break

问题是,如果用户在time.sleep暂停时按Enter键,那么这些输入将计入while循环中的输入。这导致prompt多次打印,这令人沮丧。

我想知道在time.sleep正在进行时是否有临时禁用键盘输入的方法,然后再启用它。像这样:

import time
disable_keyboard_input()
time.sleep(2)
enable_keyboard_input()

while True:
    etc.

有没有人知道使用Python做到这一点的方法?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我发现这个工作非常出色:

import time
class keyboardDisable():

    def start(self):
        self.on = True

    def stop(self):
        self.on = False

    def __call__(self): 
        while self.on:
            msvcrt.getwch()


    def __init__(self):
        self.on = False
        import msvcrt

disable = keyboardDisable()
disable.start()
time.sleep(10)
disable.stop()

它阻止用户输入任何内容;当你按键盘上的键时,没有任何反应。

答案 1 :(得分:0)

试试这个。

stdout = sys.stdout
sys.stdout = sys.stderr
time.sleep(2)

sys.stdout = stdout

while True:
    pass

没有尝试过这个。但是我希望在睡眠结束前输入的所有内容都会发送到stderr ...不确定,但是Python可以访问linux的std / null吗?