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

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

Si vous avez des pistes je vous en serez reconnaissant car ça fait 2 jours que je suis dessus.

En vous remerciant.