此脚本是True循环中的一个简单操作,用于检查电压值并写入日志文件。但是,我无法将电压值写入日志。
带有文本字符串和日期/时间戳的简单日志文件可以正常工作,但是当我尝试使用变量名时,写入操作失败。
ina3221 = SDL_Pi_INA3221.SDL_Pi_INA3221(addr=0x40)
LIPO_BATTERY_CHANNEL = 1
busvoltage1 = ina3221.getBusVoltage_V(LIPO_BATTERY_CHANNEL)
while True:
if busvoltage1 <= 3.70:
with open("/<path>/voltagecheck.log", "a") as f:
f.write("battery voltage below threshold: " + busvoltage1 + "\n")
f.write("timestamp: " + time.asctime() + "\n")
f.write("-------------------------------------------" + "\n")
f.close()
else:
time.sleep(3600)
我也尝试过:
with open("/<path>/voltagecheck.log", "a") as f:
f.write("battery voltage below threshold: " + str(busvoltage1) + "\n")
f.write("timestamp: " + time.asctime() + "\n")
f.write("-------------------------------------------" + "\n")
f.close()
不尝试将busvoltage1值添加到日志中,将创建日志,并且时间戳记行工作正常。
使用busvoltage1值创建日志,但不写入任何内容。
在终端中运行此命令时,“ str(busvoltage1)”和纯文本“ busvoltage1”的错误是:
ValueError:对已关闭文件的I / O操作
和
TypeError:无法连接“ str”和“ float”对象
答案 0 :(得分:0)
在使用f.write之前,值必须格式化为字符串。
添加了v = str(busvoltage1)
,然后在f.write中引用了v
:f.write(battery voltage below threshold: " + v + "\n")
在7.2.1的第5个示例中引用了此示例:https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files。谢谢@PatrickArtner