Мне нужно выполнить команду bash в программе python на Raspberry Pi, которая запускает запись, которая действительно начинает запись, если это звук выше определенной частоты, и заканчивается через 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 - плохой выбор... но, если я не ошибаюсь, проблема, похоже, в запущенном подпроцессе.
Итак, вот мой вопрос: как я могу выполнить этот цикл записи, но могу остановить/убить во время текущей записи с помощью пользовательского ввода через 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;
- person jDo   schedule 09.03.2016