树莓派3 Python代码os.system语法错误:&符号被识别为无效语法
修复你的Python GPIO拍照脚本语法错误
嘿,我看到你的代码里有两个关键问题导致了invalid syntax错误,咱们一步步来修复:
问题1:错误的字符串转义
你在os.system()里用了",这是HTML转义后的双引号格式,Python根本识别不了,得换成普通的双引号(")或者单引号(')。
问题2:fswebcam命令格式错误
原命令里-r后面没有指定分辨率(比如640x480),而且/dev/video0和保存路径/home/pi/webcam.jpg之间少了空格,这会导致fswebcam命令执行失败,甚至触发语法问题。
修正后的完整代码
# -*- coding:utf-8 -*- import RPi.GPIO as GPIO import time import os buttonPin = 17 GPIO.setmode(GPIO.BCM) # 加上下拉电阻,避免按钮未按下时的误触发 GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) try: while True: # 检测按钮是否被按下(高电平触发) if GPIO.input(buttonPin): # 防抖处理:等待0.2秒避免机械抖动 time.sleep(0.2) # 修正后的fswebcam命令:指定分辨率、设备、保存路径 os.system("fswebcam -r 640x480 -d /dev/video0 /home/pi/webcam.jpg") # 调用邮件发送脚本 os.system("python /home/pi/mailgonder.py") # 等待按钮释放,避免重复触发 while GPIO.input(buttonPin): time.sleep(0.1) time.sleep(0.1) finally: # 程序退出时强制清理GPIO资源,避免后续冲突 GPIO.cleanup()
额外优化说明
- 加入
pull_up_down=GPIO.PUD_DOWN:默认把引脚拉低,解决GPIO悬空时的随机电平误触发问题。 - 防抖逻辑:按钮按下后等待0.2秒,避免机械按钮的抖动导致多次执行命令。
try...finally包裹:确保程序无论正常退出还是意外中断,都会清理GPIO设置,避免影响后续GPIO操作。
内容的提问来源于stack exchange,提问作者Mehmet Emin Dağ
相关产品推荐
相关产品推荐

