
周囲の音を聞いて検出するPythonコードがあります。これは私のプロジェクトではなく、オンライン(SoPaRe)で見つけました。その./sopare.py -l
コマンドを使用すると、サウンドの録音が開始されますが、無限に繰り返されます。停止したいときはを押してくださいCtrl+C。
私の意図はこのプログラムを10秒後に自動的に終了させようとするのですが、作成者と話をしてみると、このプログラムには時間制限がないと言いました。
殺そうとしましたが、kill PID
プログラムPID
が実行されるたびに変更されます。一定間隔後にどのように停止しますかbash
?
または、Pythonでコマンドを使用してそれを実行できますos.system()
。
答え1
最も簡単な解決策は、timeout
GNU coreutilsコレクションを使用することです(ほとんどのLinuxシステムにデフォルトでインストールされています)。
timeout 10 ./sopare.py -l
man timeout
詳しくは、ユーティリティマニュアル()を参照してください。 GNU以外のシステムでは、gtimeout
このユーティリティをGNU coreutilsのようにインストールできます。
GNU coreutilsが利用できない場合、他のオプションはバックグラウンドでプロセスを開始して終了信号を送信する前に10秒間待つことです。
./sopare.py -l &
sleep 10
kill "$!"
$!
最後に開始されたバックグラウンドプロセス(この場合はPythonスクリプト)のプロセスID。
待ち時間が他の目的に使用される場合:
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"
答え2
次のbashスクリプトを試してください。
#! /bin/bash
./soapre.py -l
PID=`ps u | awk ' $11 == "./soapre.py" { print $2 }'`
sleep 10
kill $PID
このコマンドは、スクリプトがバックグラウンドで実行されているsleep 10
間にのみbashスクリプトを一時停止すると仮定します。soapre.py
また、COMMAND
列のps u
値が"./soapre/py"
。自分でできる簡単な修正ですが、うまくいくはずです。