我的情况几乎和this question一样,除了公认的答案对我根本不起作用。创建这个简单的Python脚本是我的第二次尝试;回显文本并重定向到文件也没有任何作用。我使用的是Raspbian linux发行版。
pi@raspberrypi ~ $ incrontab -l
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py
pi@raspberrypi ~ $ cat test.py
#! /usr/bin/python3
f = open('test.txt', 'a+')
f.write('success!\n')
f.close()
pi@raspberrypi ~ $ touch abc.123; rm abc.123
pi@raspberrypi ~ $ tail -n 3 /var/log/syslog
May 17 00:17:09 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )
May 17 00:18:36 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )
May 17 00:18:36 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )
pi@raspberrypi ~ $ ls
bin Desktop python_games test.py请注意,主目录中缺少test.txt。
发布于 2013-06-01 04:20:10
我在一个标准的Debian Wheezy上进行了测试。您的脚本面临的问题来自于当前工作目录(CWD)不是您所期望的。
在打开操作中设置绝对路径是避免这种情况的一种方法:
f = open('/home/pi/test.txt', 'a+')首先,我担心如果test.txt更改的事件再次触发脚本,会出现无限递归,但这似乎是由incron处理的。
由于标准错误在被incron触发时会丢失,因此使用./test.py手动测试脚本非常重要。
以下是您的脚本的一个变体,其中包含$@选项的附加信息:
#! /usr/bin/python3
import sys
import os
f = open('/home/pi/test.txt', 'a+')
f.write('success on ' + sys.argv[1] + ' with CWD=' + os.getcwd() + '\n')
f.close()它是这样注册的:
$ incrontab -l
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py $@现在,您将在/home/pi/test.txt中看到
success on /home/pi/ with CWD=/这说明您的脚本首先尝试编写/test.txt,并且不需要文件系统上的权限即可执行此操作。
https://stackoverflow.com/questions/16601386
复制相似问题