在 Raspberry Pi 2 中通过 cron 执行包含 GPIO 命令的 python 脚本

Executing a python script including GPIO commands by cron in Raspberry Pi 2

环境

问题

无法让 cron 使用 sudo 执行 python 脚本。该脚本处理 GPIO 输入,因此应使用 sudo 调用它。该程序应该将温度和湿度保存到文件中,但 cat temp.txtcat humid.txt 给了我空字符串。

crontab

sudo crontab -e

* * * * * python /home/dixhom/Adafruit_Python_DHT/examples/temphumid.py 1>>/tmp/cronoutput.log 2>>/tmp/cronerror.log

python 脚本

#!/usr/bin/python

import sys
import Adafruit_DHT
import datetime

# Adafruit_DHT.DHT22 : device name
# 4 : pin number
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)


if humidity is not None:
        f = open("humid.txt","w")
        str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), humidity)
        f.write(str)

else:
        print 'Failed to get reading. Try again!'
        sys.exit(1)

if temperature is not None:
        f = open("temp.txt","w")
        str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), temperature)
        f.write(str)
else:
        print 'Failed to get reading. Try again!'
        sys.exit(1)

cronerror.log 和 cronoutput.log

(空)

我试过的

如有任何帮助,我们将不胜感激。谢谢。

选项 1:您可以编辑 /etc/crontab。在那里,您可以指定哪个用户应在计划后的一列中立即执行相应的作业。

选项 2:使用

编辑 root 的 crontab
sudo su
crontab -e

我会选择第二个选项,因为这是 docs 建议的...

(免责声明:不对 GPIO 的东西做出任何保证。我只是假设你对 "needs sudo" 的看法是正确的,因为我从来没有在 raspi 上做过 GPIO。所以我提到了 运行 一个脚本仅作为 root。)

问题是相对路径。数据被保存到与我正在查看的不同的地方。

改变

f = open("humid.txt","w")

f = open("/home/dixhom/Adafruit_Python_DHT/examples/humid.txt","w")

解决问题。