在raspbian中,我试图用Python 3编写一个程序,将所有运动记录在一个文本文件中
PS:我正在使用连接到GPIO 26的PIR传感器,文本文件名为Test.txt
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN)
f = open('Test.txt', 'a+')
while True:
if GPIO.input(26):
import datetime
f.write (time.strftime("nn%a %b %d %I:%M:%S %p"))
f.close()
time.sleep(5)
else:
time.sleep
我的程序运行良好,直到第二次触发传感器。在LXTerminal中,我收到了这个错误
pi@raspberrypi ~/Desktop $ sudo python MotionSensorLogtest.py
Traceback (most recent call last):
File "MotionSensorLogtest.py", line 10, in <module>
f.write (time.strftime("nn%a %b %d %I:%M:%S %p"))
ValueError: I/O operation on closed file
pi@raspberrypi ~/Desktop $
我做这个项目已经有一段时间了。但是,每当我尝试使用另一篇文章的解决方案时,它要么不起作用,要么我不知道如何在我的程序中实现它。请试着理解我才刚刚开始编程,可能需要一个"我不知道我在做什么"的解释。
谢谢,如果能在这件事上提供任何帮助,我们将不胜感激
在写入文件(f.close()
)后,您将关闭该文件。您可能希望flush()
该文件,这样所有数据都将同时写入,并且不会在缓冲区中存储任何内容(也就是说,如果脚本突然中断或Python被杀,则不会丢失任何数据)。
顺便说一句,我认为你使用time.sleep
不正确。在else
的情况下,您应该调用它(使用time.sleep()
->使用括号),而不是像在当前代码中那样只对的'mention'进行排序。
您在程序开始时打开该文件一次,但每次尝试写入时都会将其关闭。只需将对f.close
的调用移动到while循环之后即可。如果发现数据没有像预期的那样频繁地进入文件,则可能需要添加flush
调用。例如:
f = open(...)
while True:
if GPIO.input(26):
import datetime
f.write (time.strftime("nn%a %b %d %I:%M:%S %p"))
f.flush()
time.sleep(5)
else:
time.sleep
f.close()