如何使用ser.readlines正确地将串行输出分配给值以供进一步使用?

时间:2011-01-10 14:49:38

标签: python regex sqlite logging pyserial

我是新手,并编写了一个脚本,通过串行USB端口启动与能量计的通信(“/?!”)并读出传入的能量记录。它从输出中提取不同的值,并将它们写入本地sqlite-db。假设每15分钟作为一个cronjob运行。一个php网站会将sqlite存储的能量读数可视化为图表btw。

目前我无法使用仪表,它在那里非常偏远和寒冷,所以我需要在去那里之前把它拿走。
如果我正在尝试执行脚本,则会引发错误: 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 :(得分:0)

我认为不是

ser.readlines(eol='!') = z
for line in z:    
你可能想要

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