You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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ğ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:57:42