使用raspberry pi zero w,设置一个脚本,用写入文件的值监视bme280传感器。当脚本是从命令行启动的,当脚本是通过systemd启动的,文件不会被写入时,这种方法非常有效。请在下面找到脚本和systemd服务。你知道吗
如果不幸运地将标准输出设置为绝对路径,python脚本write指令也设置为绝对路径。你知道吗
系统服务:
[Unit]
Description=bme280 sensor log startup
After=network.target
[Service]
ExecStart=/usr/bin/python3 -u /home/pi/bme.py
WorkingDirectory=/home/pi
StandardOutput=file:/home/pi/senselog.csv
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
python脚本:
import time
from time import strftime
import board
import busio
import adafruit_bme280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c,address=0x76)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bme_cs = digitalio.DigitalInOut(board.D10)
#bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
# change this to match the location's pressure (hPa) at sea level
bme280.sea_level_pressure = 1013.25
with open("/home/pi/senselog.csv", "a") as log:
while True:
temp_h = bme280.temperature
humidity = bme280.humidity
pressure = bme280.pressure
log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str([temp_h,humidity,pressure])))
time.sleep(60)
如果我删除传感器日志.csv文件,然后在引导时systemd服务创建新的文件,但是没有数据,任何帮助都是非常感谢的。你知道吗
因此,解决方案是在python脚本中对要写入的文件实际调用.close(),然后systemd服务按预期工作。对这个线程大声说:https://askubuntu.com/questions/83549/python-script-wont-write-data-when-ran-from-cron最后一个答案=f.close()
以及工作脚本文件:
到
StandardOutput
的file
属性只在systemd
版本236中可用。你有什么版本?你知道吗如果它低于版本236并且您不能/不想升级,您可以简单地将
ExecStart
行更新为:…然后将
StandardOutput
行放回默认值。你知道吗相关问题 更多 >
编程相关推荐