【发布时间】:2016-01-12 14:15:30
【问题描述】:
我需要在树莓派上的 python 程序中执行一个 bash 命令,它开始一个记录,如果它们是高于某个频率的声音并在 8 秒后结束或者如果有静音,它就真正开始记录。录制完成后,它会自行启动并等待录制新声音。每条记录都标有时间。这就是我在这里引用的代码:
while GPIO.input(26) == False:
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
process = subprocess.Popen ("rec -c 2 -r 192000 --buffer 50000 -b 32" + filepath + timestamp + ".wav sinc 0.1k silence 1 0.1 0.8% 1 0.4 0.8% vol 6 trim 0 8", shell = True)
process.communicate()
如您所见,要完成循环,程序会等待 GPIO 输入信号(按钮)。我有一个额外的代码来查找子进程的名称并将其杀死。
但这是我的问题:当循环运行时,它只会在一个记录完成和一个新开始之间的毫秒内“寻找”输入”。如果我在记录期间按下按钮,则循环在记录后继续。只有当我在两者之间推进时它才会中断。
起初,我认为 while-loop 可能是一个糟糕的选择……但如果我没记错的话,问题似乎是正在运行的子进程。
所以这是我的问题:我怎样才能完成这个记录循环,但可以通过 GPIO 的用户输入在运行记录期间停止/终止。 (ctrl+c 不是一个可行的选择)
非常感谢
【问题讨论】:
-
while GPIO.input(26) == False:recording = False; while GPIO.input(26) == False and not recording: recording = True; start_recording(); # recording finishes... recording = False;
标签: python bash subprocess record raspberry-pi2