Reputation: 163
I have looked at a few thread about this, but it doesn't seem to solve my problem. I am running linux and when I use raw_input(), with a pause between each, it will take the data that I have pressed before, here is an example :
import time
a = raw_input("first input")
b = raw_input("second input")
time.sleep(5)
#flush junk?
a = raw_input("third input")
b = raw_input("fourth input")
if I press any keys followed by the enter during the 5 seconds, the two other raw input will take the input. I would like to be able to flush the data and let the user be prompted.
thank you.
Upvotes: 7
Views: 10514
Reputation: 180481
For unix you can use termios.tcflush
from termios import tcflush, TCIFLUSH
import time,sys
a = raw_input("first input ")
b = raw_input("second input ")
time.sleep(5)
tcflush(sys.stdin, TCIFLUSH)
a = raw_input("third input ")
b = raw_input("fourth input ")
~$ python foo.py
first input 1
second input 2
33
33
third input 3
fourth input 4
termios.tcflush(fd, queue)
Discard queued data on file descriptor fd. The queue selector specifies which queue: TCIFLUSH for the input queue, TCOFLUSH for the output queue, or TCIOFLUSH for both queues.
Upvotes: 12
Reputation: 306
Use keypress getch class of tty (linux) and msvcrt (windows) and use sys.stdout.flush() function to flush the buffer
Upvotes: 3