如何正确将ser.readlines的串行输出赋值以便后续使用?

0 投票
1 回答
851 浏览
提问于 2025-04-16 09:43

我还是个新手,写了一个脚本,它通过USB串口和一个能量计进行通信,发送一个指令("/?!"),然后读取能量记录。这个脚本会从输出中提取不同的数值,并把这些数值写入本地的sqlite数据库。它应该每15分钟作为一个定时任务运行一次。另外,还有一个php网站会把存储在sqlite里的能量读数以图表的形式展示出来。

目前我无法访问那个能量计,因为那里很偏远而且天气寒冷,所以我需要在去之前把一切准备好。
当我尝试执行这个脚本时,出现了一个错误:ser.readlines(eol='!') = z
SyntaxError: 不能给函数调用赋值

我用ser.readlines读取串口输出并赋值给z的做法是错的吗?
这个脚本(正则表达式和插入数据库的部分)在我打开一个包含类似数值的日志文件时是可以正常工作的,比如:with open ("log") as z:..

#!/usr/bin/env python
import serial  
import time  
import re  
import sqlite3  

ser = serial.Serial('/dev/ttyUSB0', 300, bytesize=serial.SEVENBITS, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=2)
ser.open()

ser.write("/?!")  
time.sleep(0.001)  
ser.write("\r")    

connection = sqlite3.connect('/path/to/dbname.db')  
cursor = connection.cursor()  
extrakt = []

ser.readlines(eol='!') = z   
for line in z:  
            match = re.search(r'(0\.0\.0|1\.6\.1|1\.8\.1)\(([0-9\.]+)', line)  
            if match: 
                    version,value = match.groups() 
                    extrakt.append(value)

cursor.execute('INSERT INTO energielog (sernr, peak, kwh) values (?, ?, ?)', extrakt)
connection.commit()

ser.close()  
cursor.close()  
connection.close()

1 个回答

0

我觉得你可能不想用

ser.readlines(eol='!') = z
for line in z:    

而是想用

for line in ser.readlines(eol='!'):

撰写回答