You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.8KB

  1. import os
  2. from multiprocessing import Process, Queue
  3. if(os.name == "posix"):
  4. import getch as gt #clavier linux
  5. else:
  6. import msvcrt as gt #clavier linux; à tester!
  7. def press_key_timeout(caracters, numbers, actual, timeout = 0.1):
  8. """Utilisation de press_key en insérant un timeout grâce à un thread exécuté
  9. en parallèle de l'exécution principale."""
  10. queue = Queue()
  11. time_thread = Process(target = press_key, args=(caracters, numbers, actual, queue))
  12. time_thread.start() # demarre le thread
  13. time_thread.join(timeout=timeout)
  14. if(time_thread.is_alive()):
  15. time_thread.terminate() #termine le thread pour pouvoir le relancer (thread exclusif)
  16. return actual
  17. else:
  18. return queue.get() # pas besoin de terminer le thread, il s'est termine en quittant press_key
  19. def press_key(caracters, numbers, actual, queue = None):
  20. """ Cette fonction sert à détecter si un caractère est pressé, pour passer d'un
  21. état (actual) à l'un de ceux contenus dans numbers, et déclenchés
  22. par leur caractère correspondant."""
  23. pressed_key = gt.getch() #detection de touche pressee (blocant)
  24. place = caracters.find(pressed_key)
  25. if(queue != None): #si dans un thread (press_key_timeout)
  26. if(place == -1):
  27. queue.put(actual)
  28. else:
  29. queue.put(numbers[place])
  30. else: #si pas dans un thread
  31. if(place == -1):
  32. return actual
  33. else:
  34. return numbers[place]
  35. def read_line_file(path):
  36. """ Lecture des paramètres du logiciel et de l'Arduino, mis à part les capteurs
  37. définis dans un autre fichier. Pour l'instant 1 seul paramètre, donc une fonction
  38. très simple, mais peut se complexifier si besoin en 'serial_path = dev/ttyUSB0'
  39. par exemple."""
  40. try:
  41. file = open(path, "r") #lecture du fichier si existant
  42. except:
  43. file = open(path,"w") #creation du fichier si pas existant
  44. file.write("/dev/ttyUSB0") #valeur par defaut
  45. file.close()
  46. file = open(path, "r") #reouverture fichier pour lecture
  47. finally: #execute dans tous les cas
  48. line = file.readline() #lis la 1e ligne
  49. file.close() #fermer avant de renvoyer la valeur
  50. return line
  51. def find_all(string, substring):
  52. """ Méthode find mais retourne toutes les occurences au lieu d'une seule."""
  53. if(string.count(substring) == 0):
  54. return -1
  55. else:
  56. if(string.count(substring) == 1):
  57. return string.find(substring)
  58. else:
  59. result = [string.find(substring)]
  60. for i in range(string.count(substring)-1):
  61. temp_string = string[result[-1]+1:]
  62. temp_string.find(substring)
  63. temp = temp_string.find(substring) + result[-1]+1
  64. result.append(temp)
  65. return result