|
- import os
- from multiprocessing import Process, Queue
- if(os.name == "posix"):
- import getch as gt #clavier linux
- else:
- import msvcrt as gt #clavier linux; à tester!
-
- def press_key_timeout(caracters, numbers, actual, timeout = 0.1):
- """Utilisation de press_key en insérant un timeout grâce à un thread exécuté
- en parallèle de l'exécution principale."""
- queue = Queue()
- time_thread = Process(target = press_key, args=(caracters, numbers, actual, queue))
- time_thread.start() # demarre le thread
- time_thread.join(timeout=timeout)
- if(time_thread.is_alive()):
- time_thread.terminate() #termine le thread pour pouvoir le relancer (thread exclusif)
- return actual
- else:
- return queue.get() # pas besoin de terminer le thread, il s'est termine en quittant press_key
-
- def press_key(caracters, numbers, actual, queue = None):
- """ Cette fonction sert à détecter si un caractère est pressé, pour passer d'un
- état (actual) à l'un de ceux contenus dans numbers, et déclenchés
- par leur caractère correspondant."""
-
- pressed_key = gt.getch() #detection de touche pressee (blocant)
- place = caracters.find(pressed_key)
- if(queue != None): #si dans un thread (press_key_timeout)
- if(place == -1):
- queue.put(actual)
- else:
- queue.put(numbers[place])
- else: #si pas dans un thread
- if(place == -1):
- return actual
- else:
- return numbers[place]
-
- def read_line_file(path):
-
- """ Lecture des paramètres du logiciel et de l'Arduino, mis à part les capteurs
- définis dans un autre fichier. Pour l'instant 1 seul paramètre, donc une fonction
- très simple, mais peut se complexifier si besoin en 'serial_path = dev/ttyUSB0'
- par exemple."""
- try:
- file = open(path, "r") #lecture du fichier si existant
- except:
- file = open(path,"w") #creation du fichier si pas existant
- file.write("/dev/ttyUSB0") #valeur par defaut
- file.close()
- file = open(path, "r") #reouverture fichier pour lecture
- finally: #execute dans tous les cas
- line = file.readline() #lis la 1e ligne
- file.close() #fermer avant de renvoyer la valeur
- return line
-
- def find_all(string, substring):
-
- """ Méthode find mais retourne toutes les occurences au lieu d'une seule."""
-
- if(string.count(substring) == 0):
- return -1
- else:
- if(string.count(substring) == 1):
- return string.find(substring)
- else:
- result = [string.find(substring)]
- for i in range(string.count(substring)-1):
- temp_string = string[result[-1]+1:]
- temp_string.find(substring)
- temp = temp_string.find(substring) + result[-1]+1
- result.append(temp)
- return result
|