树莓派Python调用fswebcam如何使用字符串变量作为图片文件名
问题原因
原代码失效的核心是变量作用域和shell解析规则的问题:
- Python代码中定义的
NAME是Python进程内的普通变量,不会自动传递给后续调用的shell子进程 - 原代码用单引号包裹了传给os.system的命令字符串,shell语法中单引号内的
$NAME会被当做普通字符串处理,不会做任何变量替换
可直接运行的修复代码
最简易的改法是用Python f-string直接把变量值嵌入命令字符串,不需要调整fswebcam的原有参数逻辑:
import os NAME = "testname" os.system(f'fswebcam -r 3840x2160 --no-banner --jpeg 100 /home/md/pictures/{NAME}.jpg')
更稳妥的项目集成写法
如果后续主项目里NAME的值可能包含空格、特殊字符,推荐用标准库subprocess以列表形式传参,不需要手动处理转义,也能避免命令注入风险:
import subprocess NAME = "testname" target_file = f"/home/md/pictures/{NAME}.jpg" subprocess.run( [ "fswebcam", "-r", "3840x2160", "--no-banner", "--jpeg", "100", target_file ], check=True )
调试小技巧:执行命令前可以先打印拼接完成的完整命令,确认输出的文件路径符合预期后再实际调用fswebcam,能快速定位变量拼接错误。
内容的提问来源于stack exchange,提问作者Dominik Treml
相关产品推荐
相关产品推荐

