Lancer automatiquement IDE ?
A revoir...
L'idée
Je trouverai pratique et intéressant de pouvoir lancer automatiquement un logiciel, ici l'IDE Micropython, à la connexion de la carte Micropython ?
Comment faire, sachant que l'on est sous Gnu/Linux et que l'on sait que le répertoire /dev/ va être modifié avec ajout d'un périphérique type /dev/ttyUSB ou /dev/ttyACM (* est un numéro, 0 typiquement).
L'idée serait de détecter la modification du /dev et de lancer le logiciel à ce moment là.
Work around en ligne de commande ?
Sous Gnu/Linux pour détecter le changement d'un répertoire, on dispose de inotify :
-
Le plus complet avec les alternatives : https://linuxfr.org/news/exploiter-inotify-c-est-simple
En python : pyinotify :
Plus de doc :
- https://www.julp.fr/articles/14-inotify-monitorer-un-fichier-ou-un-repertoire.html
- https://itectec.com/superuser/continuously-detect-new-files-with-inotify-tools-within-multiple-directories-recursively/
- https://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/
- https://www.linuxjournal.com/content/linux-filesystem-events-inotify
Etaussi :
- fswatch : https://www.tecmint.com/fswatch-monitors-files-and-directory-changes-modifications-in-linux/
Solution en Python ?
En fait, il n'est probablement pas très difficile d'obtenir ce comportement avec un code Python qui s'exécuterait au lancement.
Par exemple, ce code fait le job :
# X. H. - www.micropython.fr
import time
yetDetected=os.listdir("/dev/")
print(yetDetected)
# fonction principale
def main():
global yetDetected
actualContent=os.listdir("/dev/")
newDetected=[el for el in actualContent if el not in yetDetected] # extrait nouvel element
if len(newDetected)>0 : # si on a une nouvelle détection
print(newDetected)
yetDetected=actualContent
cmd=["python3","/chemin/app/a/lancer"]
p=subprocess.run(cmd)
time.sleep(1)
main() # rappel auto
#--- obligatoire pour rendre code exécutable ---
if __name__ == "__main__": # cette condition est vraie si le fichier est le programme exécuté
main()# appelle la fonction principale
A noter qu'un appel de subprocess depuis le logiciel ainsi lancé crée une erreur. Mais sinon, çà fonctionne.