Sarebbe utile sapere quale sistema operativo che si sta utilizzando, in quanto si tratta di una questione molto specifico sistema operativo. Ad esempio, la risposta di Kylar non funziona su Windows perché sys.stdin non ha un attributo fileno.
ero curioso e gettato insieme una soluzione che utilizza maledizioni, ma questo non funzionerà su Windows sia:
#!/usr/bin/python
import time
import sys
import curses
def alarmloop(stdscr):
stdscr.addstr("How many seconds (alarm1)? ")
curses.echo()
alarm1 = int(stdscr.getstr())
while (1):
time.sleep(alarm1)
curses.flushinp()
stdscr.clear()
stdscr.addstr("Alarm1\n")
stdscr.addstr("Continue (Y/N)?[Y]:")
doit = stdscr.getch()
stdscr.addstr("\n")
stdscr.addstr("Input "+chr(doit)+"\n")
stdscr.refresh()
if doit == ord('N') or doit == ord('n'):
stdscr.addstr("Exiting.....\n")
break
curses.wrapper(alarmloop)
EDIT: ah, Windows. Quindi puoi usare il modulo msvcrt. Si noti che il codice qui sotto non è perfetto, e non funziona in IDLE a tutti:
#!/usr/bin/python
import time
import subprocess
import sys
import msvcrt
alarm1 = int(raw_input("How many seconds (alarm1)? "))
while (1):
time.sleep(alarm1)
print "Alarm1"
sys.stdout.flush()
# Try to flush the buffer
while msvcrt.kbhit():
msvcrt.getch()
print "Continue (Y/N)?[Y]"
doit = msvcrt.getch()
print "Input",doit
if doit == 'N' or doit=='n':
print "Exiting....."
break
fonte
2010-03-26 03:56:09
non hai bisogno di quel punto e virgola dopo 'sys.stdout.flush();' –
Il mio male, hai ragione, non ho bisogno del punto e virgola. Risolto il codice. – Amjith
"svuota o elimina tutti i tratti dei tasti"? Intendi "Leggi e ignora" Non puoi facilmente "svuotare" l'input. Perché non fare la cosa semplice e ovvia: leggerli e ignorarli? –