Search code examples
pythonsleep

How to use sleep to limit data put in logs?


I am totally new to python and just started with it. I wrote following script go get some data from the SenseHat, but unfortunately it doesn't do what it should.

It should get the temp, humidity and pressure from the SenseHat and write in to a file "data.csv" every 10 minutes.

Without the sleep(600) the script works fine, but logs to much data. With the sleep function it seems it does nothing...

This is my script:

from sense_hat import SenseHat
from datetime import datetime
from csv import writer
from time import sleep

sense = SenseHat()

def get_sense_data():
    sense_data = []
    sense_data.append(datetime.now())
    sense_data.append(sense.get_temperature())
    sense_data.append(sense.get_pressure())
    sense_data.append(sense.get_humidity())

    return sense_data

#while True:
#    print(get_sense_data())

with open('data.csv', 'wb') as f:
    data_writer = writer(f)
    data_writer.writerow(['time','temp','pres','hum'])

    while True:
        data = get_sense_data()
        data_writer.writerow(data)

        sleep(600)from sense_hat import SenseHat
from datetime import datetime
from csv import writer
from time import sleep

sense = SenseHat()

def get_sense_data():
    sense_data = []
    sense_data.append(datetime.now())
    sense_data.append(sense.get_temperature())
    sense_data.append(sense.get_pressure())
    sense_data.append(sense.get_humidity())

    return sense_data

#while True:
#    print(get_sense_data())

with open('data.csv', 'wb') as f:
    data_writer = writer(f)
    data_writer.writerow(['time','temp','pres','hum'])

    while True:
        data = get_sense_data()
        data_writer.writerow(data)

        sleep(600)

Please could anyone help me and explain to me what is wrong...?


Solution

  • Output to files is buffered. If you want to see the intermediate results of the script while it's sleeping, you need to flush the buffer.

    with open('data.csv', 'wb') as f:
        data_writer = writer(f)
        data_writer.writerow(['time','temp','pres','hum'])
    
        while True:
            data = get_sense_data()
            data_writer.writerow(data)
            f.flush()
            sleep(600)