我有一个树莓派零,其中包含一个python脚本
/home/pi/Documents/camProject
将日期和时间写入log.txt文件。
import datetime
import json
now = datetime.datetime.now()
now = str(now)
with open('log.txt','w') as f:
json.dump(now, f)
print('script complete')
print(now)
当我站在camProject文件夹中时,可以从控制台调用并执行脚本。
pi@raspberrypi:~/Documents/camProject $ sudo python3 "/home/pi/Documents/camProject/test.py"
script complete
2020-10-17 08:39:46.238224
我希望这个test.py脚本在每次重新启动时运行,所以我从命令控制台开始运行
sudo crontab -e
在我编写的crontab脚本的底部
@reboot sudo python3 "/home/pi/Documents/camProject/test.py"
重启树莓派设备后,什么也没发生,并且日期未写入log.txt文件。我尝试执行
sudo python3 "/home/pi/Documents/camProject/test.py"
从我的主目录
/home/pi
,我在控制台中的test.py中看到了打印输出,但是log.txt没有更新。但是,如果我从test.py所在的文件夹中执行相同的脚本,则一切正常。然后,我在我的camProject文件夹中检查了权限
pi@raspberrypi:~/Documents/camProject $ ls -l
totalt 20
-rwxrwxrwx 1 pi pi 66 okt 17 00:00 camVision.py
-rwxrwxrwx 1 pi pi 28 okt 17 08:50 log.txt
-rwxrwxrwx 1 pi pi 167 okt 17 08:33 test.py
-rwxrwxrwx 1 pi pi 115 okt 17 07:45 test.pyc
drwxrwxrwx 2 pi pi 4096 okt 16 14:50 Video
我猜问题出在log.txt是不可写的,而该命令恰巧是在camProject文件夹之外执行的,因此从命令控制台执行test.py时也是如此,因此crontab也是如此。我不知道如何解决这个问题?
答案 0 :(得分:0)
您的程序在当前工作目录中创建文件。 cron
个作业在调用用户的主目录中运行;因此,您的cron作业会将文件写入root
的主目录中(在基于Debian的平台上,概率为/root
)。
创建为root
的文件后,该文件只能由root
写入(除非您专门设置权限使其可全局写入,或者将写入权限分配给特定的用户组)>
可能更改脚本以写入/home/pi/log.txt
(如果您要在其中存储文件),并确保文件已存在,或者如果正在运行,则在创建文件之前切换到pi
用户为root
。 (一旦文件具有正确的所有者和权限,root
可以追加到文件中而无需更改所有者或权限。)
根据需要,不必sudo
在已经以全部cron
特权运行的root
作业中使用df['label'] = df['label'].str.replace(r'(\d)\s+',r'\1')
。