RbwNjaFurret
RbwNjaFurret

Reputation: 91

How to temporarily disable keyboard input using Python

I'm writing a simple program for Windows using Python, and this program takes advantage of the time module. Specifically, I'm using time.sleep(x) to pause the program for a short moment, generally 0.5-2 seconds. Here's basically what I'm doing:

import time
time.sleep(2)

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

The problem with this is, if the user presses enter while time.sleep has it paused, then those enters will be counted towards the input in the while loop. This results in prompt being printed several times, which is frustrating.

I want to know if there's a way to temporarily disable keyboard input while time.sleep is going on, and then enable it afterwards. Something like this:

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

while True:
    etc.

Does anyone know of a way to do this using Python? Thank you in advance!

Upvotes: 9

Views: 31314

Answers (3)

Shubham Garg
Shubham Garg

Reputation: 517

The other 2 answers are perfect if you are using it to make a real software and want to disable keyboard input only in the output screen. However, if it's for personal usage or you want to disable the keyboard for the whole system, you can use this code:

import keyboard
import time
a = int(input("Enter the time (in seconds) for which you want to disable keyboard: "))
for i in range(150):
    keyboard.block_key(i)
time.sleep(a)

Don't forget to run pip install keyboard in the terminal before executing this code otherwise, you will get an error.

Upvotes: 4

flumperious
flumperious

Reputation: 184

I found this worked brilliantly:

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()

It stops the user from typing anything; when you press a key on the keyboard, nothing happens.

Upvotes: 4

Alexander R.
Alexander R.

Reputation: 1756

Try this.

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

sys.stdout = stdout

while True:
    pass

Didn't tried this. But I hope all that was typed before sleep is ended will sended to stderr... Don't sure, but maybe Python have access to linux's std/null?

Upvotes: -1

Related Questions