Bonjour,
Je bloque devant ce problème de lire une touche entrée au clavier pour ensuite déclencher une action .
J'utilise Raspbian et Python 3.5.3
Voila un script trouvé sur internet qui pourrait me convenir, mais il ne marche pas et je ne sais pas pourquoi !
J'ai ajouté à la fin le message d'erreur qui aparait quand je lance l'exécution du script.
#!/usr/bin/python3
# adapted from https://github.com/recantha/EduKit3-RC- ... eyboard.py
import sys, termios, tty, os, time
def getch():
fd=sys.stdin.fileno()
old_settings=termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)
return ch
button_delay=0.2
while True:
char = getch()
if(char == "s"):
print("Stop")
time.sleep(button_delay)
"""
Error message:
File "/home/pi/essai_02.py", line 16, in <module>
char = getch()
File "/home/pi/essai_02.py", line 6, in getch
fd=sys.stdin.fileno()
io.UnsupportedOperation: fileno
"""
Lire une entrée clavier
Modérateurs : Francois, Manfraid
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Lire une entrée clavier
La méthode est 'pythoyable' mais le code fonctionne.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
Re: Lire une entrée clavier
Merci pour ton aide, ça fonctionne bien dans le Terminal, mais alors je ne comprends pas pourquoi ce même fichier ne fonctionne pas dans l'IDLE Raspbian.
Pour mes scripts j'utilise l'IDLE qui est un peu plus convivial que nano et je n'avais jamais eu de problème pour l'exécution.
Finalement le code était bon, sauf qu'il ne marche pas dans l'IDLE, c'est quand même BIZARRE !!!!
Si tu as une idée, je suis preneur.
Voici la dernière touche finale du script qui fonctionne bien et que je vais utiliser dans mon programme
#!/usr/bin/python3
import sys, termios, tty, os
def getch():
fd=sys.stdin.fileno()
old_settings=termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)
return ch
while True:
char = getch()
if char == "s":
print("Stop Motors")
if char == "q" or char == "Q":
print("*** Exit ***")
break
Pour mes scripts j'utilise l'IDLE qui est un peu plus convivial que nano et je n'avais jamais eu de problème pour l'exécution.
Finalement le code était bon, sauf qu'il ne marche pas dans l'IDLE, c'est quand même BIZARRE !!!!
Si tu as une idée, je suis preneur.
Voici la dernière touche finale du script qui fonctionne bien et que je vais utiliser dans mon programme
#!/usr/bin/python3
import sys, termios, tty, os
def getch():
fd=sys.stdin.fileno()
old_settings=termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)
return ch
while True:
char = getch()
if char == "s":
print("Stop Motors")
if char == "q" or char == "Q":
print("*** Exit ***")
break
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Lire une entrée clavier
Bha là je ne peux pas te répondre, je n’utilise pas IDLE (pis quoi encore ) mais je ne suis pas trop étonné que cela ne fonctionne pas vu que le script fait référence à sys.stdin.fileno, il est bien possible que l’interpréteur interactif d’Idle ait un peu de mal avec ça. En fait en lisant ton code, je ne voyais rien qui justifiait cette erreur, donc par curiosité je l’ai juste copié/collé dans un fichier et je l’ai lancé en cli pour valider mon analyse (qui s‘est avérée juste il va de soit )
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).