树莓派标签打印系统:如何从TXT逐行读取更新变量
解决Python读取TXT文件绑定变量并触发更新标签的问题
核心思路
每次触发按钮事件时,按固定顺序读取TXT文件的每一行,将内容对应绑定到指定变量,再执行标签打印逻辑。
实现代码
1. 编写读取TXT文件的函数
这个函数负责按顺序读取文件行,映射到对应的变量名:
def load_label_variables(file_path): # 定义变量名顺序,必须和TXT文件每行内容一一对应 var_names = ['pr', 'pn', 'cp', 'pd', 'bq', 'co', 'ma', 'mo', 'ln', 'maxbox'] label_vars = {} try: with open(file_path, 'r', encoding='utf-8') as f: # 读取所有行并去除首尾空白(包括换行符) lines = [line.strip() for line in f.readlines()] # 校验行数是否匹配变量数量 if len(lines) != len(var_names): print(f"警告:文件行数({len(lines)})与变量数({len(var_names)})不匹配,使用空值填充") for name in var_names: label_vars[name] = "" return label_vars # 绑定每行内容到对应变量 for name, value in zip(var_names, lines): label_vars[name] = value except FileNotFoundError: print(f"错误:未找到文件 {file_path}") for name in var_names: label_vars[name] = "" except Exception as e: print(f"读取文件出错:{str(e)}") for name in var_names: label_vars[name] = "" return label_vars
2. 在按钮事件中调用读取函数并打印标签
修改你的buttonEvent函数,每次触发时重新读取文件更新变量:
def buttonEvent(): # 替换为你的TXT文件实际路径(比如Apache托管的PHP写入路径,如/var/www/html/label_data.txt) txt_file_path = '/var/www/html/label_data.txt' # 加载最新的标签变量 label_vars = load_label_variables(txt_file_path) # 提取变量(按需使用) pr = label_vars['pr'] pn = label_vars['pn'] cp = label_vars['cp'] pd = label_vars['pd'] bq = label_vars['bq'] co = label_vars['co'] ma = label_vars['ma'] mo = label_vars['mo'] ln = label_vars['ln'] maxbox = label_vars['maxbox'] # 执行你的标签打印逻辑,替换为你原有的生成标签代码 # 示例:print_label(pr, pn, cp, pd, bq, co, ma, mo, ln, maxbox) print_label(pr, pn, cp, pd, bq, co, ma, mo, ln, maxbox)
关键注意事项
- 文件格式一致性:确保PHP写入TXT文件时,严格按照
pr、pn、cp...maxbox的顺序每行写入一个值,不要出现多余空行或换行符。 - 文件权限设置:Apache的
www-data用户写入文件后,要保证运行Python脚本的用户(比如pi)有读取权限。可以通过设置文件权限为664,或者将Python脚本以www-data用户运行(比如用systemd服务配置)。 - 错误处理:代码中加入了基础的错误捕获,你可以根据实际需求扩展(比如记录日志、触发警报等)。
内容的提问来源于stack exchange,提问作者rotarybean
相关产品推荐
相关产品推荐

