Lire une entrée clavier

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
charlie60
Messages : 20
Enregistré le : mar. 6 févr. 2018 15:59

Lire une entrée clavier

Message par charlie60 » jeu. 20 déc. 2018 22:52

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
"""

Bud Spencer
Raspinaute
Messages : 457
Enregistré le : lun. 15 août 2016 21:38

Re: Lire une entrée clavier

Message par Bud Spencer » dim. 23 déc. 2018 12:42

La méthode est 'pythoyable' mais le code fonctionne.
test_py.png
test_py.png (46.71 Kio) Vu 94 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

charlie60
Messages : 20
Enregistré le : mar. 6 févr. 2018 15:59

Re: Lire une entrée clavier

Message par charlie60 » lun. 24 déc. 2018 11:34

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

Bud Spencer
Raspinaute
Messages : 457
Enregistré le : lun. 15 août 2016 21:38

Re: Lire une entrée clavier

Message par Bud Spencer » jeu. 27 déc. 2018 17:21

Bha là je ne peux pas te répondre, je n’utilise pas IDLE (pis quoi encore :lol: ) 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 :mrgreen: )
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Python »