Ich habe einen Python-Code, der Umgebungsgeräusche hört und erkennt. Es ist nicht mein Projekt, ich habe es im Internet (SoPaRe) gefunden. Mit dem ./sopare.py -l
Befehl, beginnt es Sounds aufzunehmen, aber in Endlosschleife. Wenn ich es stoppen möchte, muss ich Strg+C drücken .
Mein Ziel ist es, dieses Programm automatisch nach 10 Sekunden zu stoppen, aber als ich mit dem Autor sprach, sagte er, dass das Programm keine Zeitbegrenzung hat.
Ich habe versucht, es über kill PID
zu beenden , aber PID
ändert sich jedes Mal, wenn das Programm ausgeführt wird. Wie kann es nach einem Zeitintervall über bash
gestoppt werden ?
Alternativ kann ich diesen Befehl von Python aus mit os.system()
ausführen Befehl.
Akzeptierte Antwort:
Die einfachste Lösung wäre die Verwendung von timeout
aus der Sammlung von GNU Coreutils (wahrscheinlich standardmäßig auf den meisten Linux-Systemen installiert):
timeout 10 ./sopare.py -l
Weitere Optionen finden Sie im Handbuch für dieses Dienstprogramm (man timeout
). Auf Nicht-GNU-Systemen kann dieses Dienstprogramm als gtimeout
installiert werden ob GNU Coreutils überhaupt installiert ist.
Wenn GNU Coreutils nicht verfügbar ist, besteht eine weitere Alternative darin, den Prozess im Hintergrund zu starten und 10 Sekunden zu warten, bevor ihm ein Beendigungssignal gesendet wird:
./sopare.py -l &
sleep 10
kill "$!"
$!
wird die Prozess-ID des zuletzt gestarteten Hintergrundprozesses sein, in diesem Fall Ihres Python-Skripts.
Falls die Wartezeit anderweitig genutzt wird:
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"