【问题标题】:Cannot run Python from Cron无法从 Cron 运行 Python
【发布时间】:2014-02-10 06:08:33
【问题描述】:

我有一个 python 脚本,它将从 Raspberry-Pi 的 GPIO 引脚上的探针读取温度,并将该温度附加到日志文件中。使用 sudo 权限运行脚本表单终端可以正常工作:

sudo python /home/pi/temp.py

我尝试从 sudo 的 crontab 文件中每 15 分钟运行一次脚本,其中包含以下行:

*/15 * * * * python /home/pi/temp.py

这失败了,输出是

Traceback (most recent call last):
  File "/home/pi/temp.py", line 8, in <module>
    subprocess.call(['modprobe', 'w1-gpio'])
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

我知道问题出在 modprobe 子进程调用上,但我无法确定具体是什么。在我的脚本中,我有以下与该问题相关的代码:

import subprocess

subprocess.call(['modprobe', 'w1-gpio'])
subprocess.call(['modprobe', 'w1-therm'])

【问题讨论】:

    标签: python cron subprocess raspberry-pi


    【解决方案1】:

    这是因为cron 有自己的PATH 变量,并且不使用与您相同的路径。
    因此,建议使用可执行文件的绝对路径调用您使用的任何程序(尤其是通过 python 的subprocess

    您可以在命令行上执行which modprobe 以查找modprobe 所在的位置(可能在/bin/ 中),然后将您在subprocess.py 中的调用更改为subprocess.call(['/bin/modprobe', 'w1-gpio'])

    【讨论】:

    • 就是这样。我的 modprobe 住在/sbin/,但是将它添加到我的temp.py 脚本中的 subprocess.call 解决了我的问题。非常感谢!
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2020-08-16
    • 2015-09-20
    • 2021-11-26
    相关资源
    最近更新 更多