Eu tenho um código Python que ouve e detecta sons ambientais. Não é meu projeto, encontrei na web (SoPaRe). Com o ./sopare.py -l
comando, ele começa a gravar sons, mas em loop infinito. Quando quero pará-lo, tenho que pressionar Ctrl+C.
Meu objetivo é parar este programa automaticamente após 10 segundos, mas quando conversei com o autor ele disse que o programa não possui um limitador de tempo.
Eu tentei matá-lo via kill PID
, mas PID
muda toda vez que o programa é executado. Como pode pará-lo após um intervalo de tempo via bash
?
Alternativamente, posso executar este comando de python com os.system()
command.
A solução mais simples seria usar
timeout
a coleção de GNU coreutils (provavelmente instalados por padrão na maioria dos sistemas Linux):Consulte o manual deste utilitário para mais opções (
man timeout
). Em sistemas não GNU, este utilitário pode ser instalado comogtimeout
se o GNU coreutils estivesse instalado.Outra alternativa, se o GNU coreutils não estiver disponível, é iniciar o processo em segundo plano e aguardar 10 segundos antes de enviar um sinal de encerramento:
$!
será o ID do processo do processo em segundo plano iniciado mais recentemente, neste caso do seu script Python.Caso o tempo de espera seja utilizado para outras coisas:
Tente este script bash:
Estou supondo que o
sleep 10
comando pausa apenas o script bash enquanto osoapre.py
ainda está sendo executado em segundo plano. Além disso, talvez a colunaCOMMAND
deps u
tenha um valor diferente de"./soapre/py"
. faça suas próprias correções simples, mas isso deve funcionar.