Ho un codice Python che ascolta e rileva i suoni ambientali. Non è un mio progetto, l'ho trovato sul web (SoPaRe). Con il ./sopare.py -l
comando, inizia a registrare suoni ma in loop infinito. Quando voglio fermarlo, devo premere Ctrl+C .
Il mio scopo è fermare questo programma automaticamente dopo 10 secondi, ma quando ho parlato con l'autore ha detto che il programma non ha un limitatore di tempo.
Ho provato a ucciderlo tramite kill PID
, ma PID
cambia ogni volta che viene eseguito il programma. Come fermarlo dopo un intervallo di tempo tramite bash
?
In alternativa, posso eseguire questo comando da python con os.system()
comando.
Risposta accettata:
La soluzione più semplice sarebbe usare timeout
dalla raccolta di GNU coreutils (probabilmente installato di default sulla maggior parte dei sistemi Linux):
timeout 10 ./sopare.py -l
Vedere il manuale di questa utility per ulteriori opzioni (man timeout
). Su sistemi non GNU, questa utility può essere installata come gtimeout
se GNU coreutils è installato.
Un'altra alternativa, se GNU coreutils non è disponibile, è avviare il processo in background e attendere 10 secondi prima di inviargli un segnale di terminazione:
./sopare.py -l &
sleep 10
kill "$!"
$!
sarà l'ID del processo in background avviato più di recente, in questo caso del tuo script Python.
Nel caso in cui il tempo di attesa venga utilizzato per altre cose:
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"