在记录数据时打开和关闭文件
Opening and closing a file while logging data
因此,我正在记录连接到 raspberry pi 上 GPIO 的 DHT22 的温度和湿度数据。它正确记录了所有内容 - 但我只能在停止后才能看到更新的日志 logger.py 运行ning.
我认为问题是我在写入文件后没有关闭它 - 但我不确定。我可以在循环中添加一个 f = open(xxx) 和 f.close() 以便它每次记录时 'saves' 它吗?
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 在我从 运行ning 停止 logger.py 之前不会更新(使用来自 htop 的 sigint,因为它目前 运行 作为启动时的 cronjob)。
每次我们打开一个文件时,我们都需要关闭它以将输出推送到磁盘:
fp = open("./file.txt", "w")
fp.write("Hello, World")
fp.close()
为了避免每次都调用close()方法,我们可以使用open()函数的context manager,它会在退出block后自动关闭文件:
with open("./file.txt", "w") as fp:
fp.write("Hello, World")
我们不需要每次都在这里调用close方法将数据推送到文件中。
将数据写入文件并点击 file.flush()
然后执行 file.fsync()
将数据写入磁盘,您甚至可以使用不同的程序打开文件并查看更改实时。
因此,我正在记录连接到 raspberry pi 上 GPIO 的 DHT22 的温度和湿度数据。它正确记录了所有内容 - 但我只能在停止后才能看到更新的日志 logger.py 运行ning.
我认为问题是我在写入文件后没有关闭它 - 但我不确定。我可以在循环中添加一个 f = open(xxx) 和 f.close() 以便它每次记录时 'saves' 它吗?
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 在我从 运行ning 停止 logger.py 之前不会更新(使用来自 htop 的 sigint,因为它目前 运行 作为启动时的 cronjob)。
每次我们打开一个文件时,我们都需要关闭它以将输出推送到磁盘:
fp = open("./file.txt", "w")
fp.write("Hello, World")
fp.close()
为了避免每次都调用close()方法,我们可以使用open()函数的context manager,它会在退出block后自动关闭文件:
with open("./file.txt", "w") as fp:
fp.write("Hello, World")
我们不需要每次都在这里调用close方法将数据推送到文件中。
将数据写入文件并点击 file.flush()
然后执行 file.fsync()
将数据写入磁盘,您甚至可以使用不同的程序打开文件并查看更改实时。