在记录数据时打开和关闭文件

问题描述 投票:0回答:2

所以,我正在记录DHT22的温度和湿度数据,该数据已连接到树莓派的GPIO。它可以正确记录所有内容-但只有停止logger.py运行后,我才能看到更新的日志。

我认为问题在于,写入文件后我没有关闭文件-但我不确定。我可以在循环中添加一个f = open(xxx)和f.close()以便每次记录时都“保存”吗?

import os
import time
import Adafruit_DHT

DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

try:
        f = open('/home/pi/temphumid/log.csv', 'a+')
        if os.stat('/home/pi/temphumid/log.csv').st_size == 0:
                f.write('Date,Time,Temperature,Humidity\r\n')
except:
        pass

while True:
        humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)

        if humidity is not None and temperature is not None:
                f.write('{0},{1},{2:0.1f}*C,{3:0.1f}%\r\n'.format(time.strftime('%m/%d/%y'), time.strftime('%H:%M:%S'), temperature, humidity))
        else:
                print("Failed to retrieve data from humidity sensor")

        time.sleep(60)

预期:log.csv已更新,因此,如果我使用tail log.csv,则可以看到最新数据。

实际:在我停止运行logger.py之前,log.csv不会更新(使用htop中的sigint,因为它目前在启动时作为cronjob运行。)>

所以,我正在记录DHT22的温度和湿度数据,该数据已连接到树莓派的GPIO。它可以正确记录所有内容-但只有在停止logger.py运行之后,我才能看到更新的日志。我...

python fopen fclose
2个回答
0
投票

每次打开文件时,我们都需要关闭它以将输出推送到磁盘:


0
投票

将数据写入文件并单击file.flush(),然后执行file.fsync()将数据写入磁盘,您甚至可以使用其他程序打开文件并实时查看更改。]

© www.soinside.com 2019 - 2024. All rights reserved.