Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用串行端口数据更新RRDTool_Python_Rrdtool - Fatal编程技术网

Python使用串行端口数据更新RRDTool

Python使用串行端口数据更新RRDTool,python,rrdtool,Python,Rrdtool,我正在尝试使用串行信息更新RRDTool DB。是否可以在更新行中将串行数据声明为变量?使用下面的代码,rrdtool看不到N:timestamp。但是,如果我在“N:”后面手动输入数据,它将更新 import serial import time import numpy import sys import rrdtool ser = serial.Serial('/dev/ttyUSB0', 9600) time.sleep(1) ser.flush() for i in range

我正在尝试使用串行信息更新RRDTool DB。是否可以在更新行中将串行数据声明为变量?使用下面的代码,rrdtool看不到N:timestamp。但是,如果我在“N:”后面手动输入数据,它将更新

import serial
import time
import numpy
import sys
import rrdtool


ser = serial.Serial('/dev/ttyUSB0', 9600)
time.sleep(1)
ser.flush()


for i in range(2):
    ser.readline()


while 1:    
    # Read data
    temp = ser.readline()
    ret = rrdtool.update('temperature.rrd', 'N:', temp)
    if ret:
     print rrdtool.error()
     time.sleep(5)
    quit()

我相信你想这样做:

ret = rrdtool.update('temperature.rrd', 'N:%s' % temp)
rrdtool包装函数中的每个参数都应与rrdtool cli命令中的参数相对应。因此,在上一个示例中,当您使用3个参数运行rrdtool.update时,实际上运行的是类似于:

rrdtool update temperature.rrd N: 65.6
更新应该是单个参数,因此这才是您真正想要的:

rrdtool update temperature.rrd N:65.6

“手动输入数据”是什么意思?你的意思是在Python之外的命令行上使用
rrdtool update
命令吗?如果我在Python脚本的N:后面加上一个数字,它会更新数据库。Ie'N:65.5'谢谢andr0x,这似乎有效,但是rrdtool似乎在将输入转换为浮点数时遇到问题。回溯(最后一次调用):ret=rrdtool.update('temperature.rrd',N:%s'%temp)rrdtool.error:temperature.rrd:'61.50'到float的转换未完成:tail'有什么想法吗?可能是小数点。我会一直插上插头,让您知道发生了什么错误消息显示
temp
变量中的0后面有一个空格。那可能需要移除。啊,明白了。正在尝试删除空间。非常感谢你们两位。为了清楚起见,我在示例中使用了字符串格式运算符: