Открытие и закрытие файла во время регистрации данных - PullRequest
0 голосов
/ 18 октября 2019

Итак, я записываю данные о температуре и влажности от DHT22, подключенного к GPIO на Raspberry Pi. Он регистрирует все правильно - но я могу видеть обновленный журнал только после остановки logger.py.

Мне кажется, проблема в том, что я не закрываю файл после записи в него - но я неконечно. Могу ли я просто добавить af = 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. Я могу видеть последние данные.

актуально: log.csv не обновляется до тех пор, пока я не остановлю запуск logger.py (используя sigint из htop, так как он в настоящий момент запускается какcronjob при загрузке).

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Запишите данные в файл и нажмите file.flush(), а затем выполните file.fsync(), который записывает данные на диск, и вы даже сможете открыть файл с помощью другой программы и увидеть изменения в реальном времени.

0 голосов
/ 18 октября 2019

Каждый раз, когда мы открываем файл, нам нужно закрыть его, чтобы отправить вывод на диск:

fp = open("./file.txt", "w")
fp.write("Hello, World")
fp.close()

Чтобы не вызывать метод close () каждый раз, мы можем использовать менеджер контекста функции open (), которая автоматически закроет файл после выхода из блока:

with open("./file.txt", "w") as fp:
    fp.write("Hello, World")

Нам не нужно каждый раз вызывать здесь метод close, чтобы вставить данные в файл.

...