如何正确将ser.readlines的串行输出赋值以便后续使用?
我还是个新手,写了一个脚本,它通过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='!'):