Mám kód Pythonu, který poslouchá a detekuje zvuky prostředí. Není to můj projekt, našel jsem ho na webu (SoPaRe). Pomocí ./sopare.py -l
spustí nahrávání zvuků, ale v nekonečné smyčce. Když to chci zastavit, musím stisknout Ctrl+C .
Mým cílem je tento program automaticky zastavit po 10 sekundách, ale když jsem mluvil s autorem, řekl, že program nemá časový limit.
Zkusil jsem to zabít pomocí kill PID
, ale PID
se mění při každém spuštění programu. Jak to zastavit po časovém intervalu pomocí bash
?
Případně mohu tento příkaz provést z pythonu pomocí os.system()
příkaz.
Přijatá odpověď:
Nejjednodušším řešením by bylo použít timeout
z kolekce GNU coreutils (pravděpodobně ve výchozím nastavení na většině systémů Linux):
timeout 10 ./sopare.py -l
Další možnosti naleznete v příručce k tomuto nástroji (man timeout
). Na systémech bez GNU lze tento nástroj nainstalovat jako gtimeout
pokud je GNU coreutils vůbec nainstalován.
Další alternativou, pokud GNU coreutils není k dispozici, je spustit proces na pozadí a počkat 10 sekund, než mu odešlete signál ukončení:
./sopare.py -l &
sleep 10
kill "$!"
$!
bude ID procesu naposledy spuštěného procesu na pozadí, v tomto případě vašeho skriptu Python.
V případě, že je čekací doba využita na jiné věci:
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"