2011-07-18 4 views
0

私はarecordというプログラムを呼び出しています(下のコードを参照)。それはマイクの入力を受け取り、Ctrl + Cを押してスクリプトの残りの部分を続行することによってそれを停止します。プログラムを呼び出した後に入力を読み取る方法は、「読み込み:読み込みエラー:0:リソースは一時的に利用できません」

私は次のことをやりたい、それがループ

から抜け出す必要があるかどうかを確認するために私の入力(CまたはR)を読まれるしかし、入力が読み込まれず、エラーが「read:読み取りエラー:0:リソースは一時的に利用できません "。

終了コードや入力ストリームと関係がありますが、それ以上はできません。

#!/bin/bash 

while : 
do 
    # Record the audio 
    arecord -f cd -c 1 -t wav sound.wav 

    # Recording now finished, get user input 
    read -p "Continue or repeat recording? [c, r]: " input 
    if [ "${input}" == "c" ] 
    then 
     break 
    fi 
done 
+0

残念ながら、私はこれに対する解決策を見つけることができませんでした。 Pythonでこれをやろうとしています! – eoinoc

答えて

0

答えはそれがarecordSIGINT(Ctrl + C)をどのように扱うかによって異なりますが、正確に何が起こっているかを理解したい場合は、thisを読んで、簡単ではありません。とにかく、私はそのようにSIGINTを使用しないことをお勧めだろうが:バックグラウンドで

実行arecord(末尾の&で)、(arecodr_pid=$!)PIDを取得し、その後、read何か kill -2 $arecodr_pidenoughようとした後、 # Recording now finished, get user input

arecordが他の信号を処理することがわかっている場合は、kill -<signal num> $arecord_pidを使用できます。-9を使用しないと、プロセスは処理できません。ほとんどの場合、アウトファイルが破損します。

+0

"十分なものを読んで"、 "kill -2 $ arecodr_pid'"とすれば、録音をすばやく止めることができますか?私は音が終わったら止めることをどのように指示するのか困惑しています(調節可能な長さです)。 – eoinoc

関連する問題