树莓派3按钮控制浏览器双摄像头全屏显示脚本暂停问题求助
问题分析与最小改动解决方案
你的核心问题出在os.system()的行为上:这个函数会阻塞当前脚本的执行,直到它调用的命令(也就是Chromium)完全退出。所以每次你用它启动全屏浏览器时,脚本就会卡在这一行,直到你关闭浏览器才会继续执行后面的循环逻辑。
最小改动的修复方法
只需要在Chromium的启动命令末尾加上&符号,让进程在后台运行,这样os.system()执行完启动命令后会立刻返回,脚本就能继续运行循环监听按钮了。
修改后的完整代码如下(标注了改动的行):
import RPi.GPIO as GPIO from time import sleep import os url1 = 'http://10.0.0.31/mjpg/video.mjpg' url2 = 'http://10.0.0.32/mjpg/video.mjpg' GPIO.setmode(GPIO.BCM) array = [4,17] GPIO.setup(array, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 改动:末尾加&让浏览器后台运行 os.system('chromium-browser --app=http://10.0.0.31/mjpg/video.mjpg --kiosk &') while True: if ( GPIO.input(17) == False ): print('Button 1 Pressed') os.system('date') os.system('pkill chromium-browser') print (GPIO.input(17)) # 改动:末尾加&让浏览器后台运行 os.system('chromium-browser --app=http://10.0.0.32/mjpg/video.mjpg --kiosk &') sleep(0.5) if ( GPIO.input(4) == False ): print('Button 2 Pressed') os.system('date') os.system('pkill chromium-browser') print (GPIO.input(4)) # 改动:末尾加&让浏览器后台运行 os.system('chromium-browser --app=http://10.0.0.31/mjpg/video.mjpg --kiosk &') sleep(0.5) else: os.system('clear') print ('Press a key') sleep(0.1)
额外说明
&是Linux shell的语法,用来让命令在后台启动,不会阻塞当前终端/脚本的执行。- 你原来的
pkill chromium-browser依然可以正常杀掉后台运行的Chromium进程,不用担心进程残留的问题。 - 你已经加了
sleep(0.5)做按钮防抖,这个逻辑可以保留,避免误触发。
内容的提问来源于stack exchange,提问作者dekoedoemoe
相关产品推荐
相关产品推荐

