Pythonサブプロセスを使用してRaspberry Piでオーディオを再生しようとしていて、GPIO接続のボタンが押されたときにサブプロセスを強制終了します。終了するのを待っている間にPythonサブプロセスをどのように殺すのですか?
問題は、再生ファイル間にPopen.wait()サブプロセスがある場合、サブプロセスがkillされないことです。再生するファイルが1つしかない場合は、終了するまで待つ必要はなく、p.kill()コマンドは正常に動作します。 p.wait()が挿入されてファイルが互いの上で再生されないとすぐに、Popen.kill()は動作しなくなります。
Kill a running subprocess callでos.kill()を使用して既に試してみました。 Popen.wait()の下でどのようにサブプロセスが動作するかについての他のリソースは見つかりません。私は、1つのplay_wavコマンドを持つのではなく、2番目のコードスニペットの3つのplay_wavコマンドの間に、いつでもボタンを押すと、下のコードでaplay関数を強制終了する方法を探しています。ここで
は)(subprocess.Popenを利用play_wav機能です:
# play wav file on the attached system sound device
def play_wav(wav_filename):
global p
msg = "playing " + wav_filename
logger.debug(msg)
p = subprocess.Popen(
['aplay','-i','-D','plughw:1', wav_filename],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
shell = False
)
ここplay_wav関数を呼び出すコードのスニペットです:
私はボタンの押下をチェックしていますどのように# determine what to do when a button is pressed
def button_pressed(channel):
global MENU
btnval = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS) # check value of ADC
if btnval > 980: # 1
if p.poll() == None:
p.kill()
if MENU == 1:
play_wav("/media/pi/WONDERPHONE/prompts/en/Menu1.wav")
p.wait()
play_wav("/media/pi/WONDERPHONE/stories/1/PersonalStory.wav")
p.wait()
play_wav("/media/pi/WONDERPHONE/prompts/en/returntomain.wav")
:
GPIO.add_event_detect(PRESSED, GPIO.RISING, callback=button_pressed, bouncetime=500) # look for button presses