Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linux : python : clear input buffer before raw_input()

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.

like image 729
IHaveSumQuestions Avatar asked Oct 24 '14 19:10

IHaveSumQuestions


2 Answers

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.

like image 200
Padraic Cunningham Avatar answered Nov 08 '22 04:11

Padraic Cunningham


Use keypress getch class of tty (linux) and msvcrt (windows) and use sys.stdout.flush() function to flush the buffer

like image 23
Shabir A. Avatar answered Nov 08 '22 06:11

Shabir A.