Bonjour a tous, j'aimerais écrire une fonction qui me prend le prochain caractère tapé sur la clavier, mais qui , si aucune touche n'est enfoncé me retourne un caractère par défaut au bout d'un certain temps donné.
Pour la fonction me prenant le prochain caractère tapé j'utilise ça
Mais par contre je n'arrive pas a intégrer un timer me retournant un caractère par défaut si aucune touche n'est enfoncée. Ceci est du au fait que le sys.stdin.read(1) est bloquant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import fcntl import os import sys import termios import time # source : https://gist.github.com/eallik/6751903 def getch(): fd = sys.stdin.fileno() oldattr = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while True: try: c = sys.stdin.read(1) except IOError: pass else: return c finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldattr) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
Si vous avez des pistes je vous en serez reconnaissant car ça fait 2 jours que je suis dessus.
En vous remerciant.
Partager