J'ai un code Python qui écoute et détecte les sons environnementaux. Ce n'est pas mon projet, je l'ai trouvé sur le web (SoPaRe). Avec le ./sopare.py -l
commande, il commence à enregistrer des sons mais en boucle infinie. Quand je veux l'arrêter, je dois appuyer sur Ctrl+C .
Mon but est d'arrêter ce programme automatiquement après 10 secondes, mais quand j'ai parlé avec l'auteur, il m'a dit que le programme n'avait pas de limiteur de temps.
J'ai essayé de le tuer via kill PID
, mais PID
change à chaque exécution du programme. Comment peut-il l'arrêter après un intervalle de temps via bash
?
Alternativement, je peux exécuter cette commande à partir de python avec os.system()
commande.
Réponse acceptée :
La solution la plus simple serait d'utiliser timeout
de la collection de GNU coreutils (probablement installé par défaut sur la plupart des systèmes Linux) :
timeout 10 ./sopare.py -l
Voir le manuel de cet utilitaire pour plus d'options (man timeout
). Sur les systèmes non GNU, cet utilitaire peut être installé en tant que gtimeout
si GNU coreutils est installé.
Une autre alternative, si GNU coreutils n'est pas disponible, est de démarrer le processus en arrière-plan et d'attendre 10 secondes avant de lui envoyer un signal de terminaison :
./sopare.py -l &
sleep 10
kill "$!"
$!
sera l'ID de processus du processus d'arrière-plan le plus récemment démarré, dans ce cas de votre script Python.
Dans le cas où le temps d'attente est utilisé pour autre chose :
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"