如何在Python子进程';什么在等着结束?
尝试使用Python子进程在Raspberry Pi上播放音频,并在按下GPIO连接按钮时终止子进程 我遇到的问题是,当播放文件之间有一个subprocess Popen.wait()命令时,子进程不会终止。如果只有一个文件要播放,则无需等待它完成,p.kill()命令也可以正常工作。一旦插入了p.wait(),这样文件就不会相互重叠,Popen.kill()就不再工作 已尝试在中使用os.kill() . 在Popen.wait()下找不到有关子流程行为的任何其他资源。我正在寻找一种方法来强制下面代码中的aplay函数在第二个代码段中的三个play_wav命令执行期间随时按下按钮关闭,而不是只执行一个play_wav命令 下面是利用subprocess.Popen()的play_wav函数: 下面是调用play_wav函数的代码片段:如何在Python子进程';什么在等着结束?,python,subprocess,gpio,alsa,Python,Subprocess,Gpio,Alsa,尝试使用Python子进程在Raspberry Pi上播放音频,并在按下GPIO连接按钮时终止子进程 我遇到的问题是,当播放文件之间有一个subprocess Popen.wait()命令时,子进程不会终止。如果只有一个文件要播放,则无需等待它完成,p.kill()命令也可以正常工作。一旦插入了p.wait(),这样文件就不会相互重叠,Popen.kill()就不再工作 已尝试在中使用os.kill() . 在Popen.wait()下找不到有关子流程行为的任何其他资源。我正在寻找一种方法来强制
# 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
您可以使用终端来实现这一点。 ps aux| grep任务名
sudo kill-9 taskid来自
子流程
模块文档:
等等
等待子进程终止。设置并返回returncode属性。
警告-当使用stdout=PIPE和/或stderr=PIPE时,这将导致死锁,并且子进程将生成足够的输出到管道,从而阻止等待OS管道缓冲区接受更多数据。使用communicate()可以避免这种情况
在终止子进程之前,请尝试使用communicate()
GPIO.add_event_detect(PRESSED, GPIO.RISING, callback=button_pressed, bouncetime=500) # look for button presses