【问题标题】:Why doesn't my Python script open a text file when run via cron?为什么我的 Python 脚本在通过 cron 运行时没有打开文本文件?
【发布时间】:2015-05-05 22:53:34
【问题描述】:

我有一个 Python 程序,当我从 LXTerminal 正常运行它时,它可以正常工作:

$ sudo python testcon.py

但是当我使用cron 运行它以在重启后启动时:

@reboot python /home/pi/testcon.py &

它停在该行:

f = open('info.txt')

并且不再做任何事情。它应该打开文件/home/pi/info.txt

为什么会这样?我该如何解决这个问题?

这是我的程序的一个更简单的版本,它显示了问题:

import smbus
import time

bus = smbus.SMBus(1) # Rev 2 Pi uses 1

DEVICE = 0x23 # Device address (A0-A2)
IODIRA = 0x00 # Pin direction register
OLATA  = 0x14 # Register for outputs
GPIOA  = 0x12 # Register for inputs

bus.write_byte_data(DEVICE,IODIRA,0x00)

bus.write_byte_data(DEVICE,OLATA,0xFF)  #set all of the outputs
time.sleep(3)                           #wait for 3 sec

f = open('info.txt')                    #should open the txt file
bus.write_byte_data(DEVICE,OLATA,0)     #clear all of the outputs
f.close()

【问题讨论】:

  • 我的猜测是python不在cron进程的路径中。你能追踪到日志中的错误信息吗?
  • 不完全理解你的意思,但是当重新启动树莓时我可以启动程序(使用按钮),但是当程序到达这部分 f=open('info.txt') 程序停止.如果我从 sudo python 开始......没有问题。我应该以某种方式在 cron 中写入以使其能够打开 txt 文件吗?
  • (a) 覆盆子,你说? (b) 如果添加 sudo 修复它,这显然是一个权限问题。如果您的常规帐户可以访问该文件,则似乎 cron 以自己的用户身份运行,是这样吗?
  • 对不起,我的意思是“sudo added”当我在LX终端启动程序时,只有这种情况下python程序才能正常运行并打开txt文件。如果我在重启后设置为由 cron 启动,则 python 程序会在应该打开 txt 文件的那一行停止。那我该怎么办,也许允许 cron 打开文本文件,或者我不知道?
  • 我认为你需要做一些工作来清楚地解释你的情况。我仍然没有信心我理解你所描述的。任何人都无法重现您的问题,即使他们拥有您的计算机和操作系统。专注于此,我相信你会得到解决。

标签: python cron raspberry-pi


【解决方案1】:

@reboot 选项只能在 root 中使用。它不能在您的用户的 cron 中调用。但是,有时这取决于您的操作系统。见here

【讨论】:

  • 另外,请有特权的人将此问题标记为链接问题的副本。
【解决方案2】:

看看this rather similar question,尤其是this answer,我有两个建议:

a) raspberry 是否支持 @reboot 语法?通过阅读 cron 和 crontab 的手册页进行检查。

b) 从linked answer 看来,您需要添加应该执行脚本的用户名:

@reboot username /usr/bin/python /home/pi/test.py &

如果程序只有以root身份运行才能成功,使用root作为用户名;但除此之外,最好避免以 root 身份运行。

【讨论】:

  • 请看我上面的程序
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 2011-03-27
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多