在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("\n\n%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("\n\n%a %b %d %I:%M:%S %p"))
ValueError: I/O operation on closed file
pi@raspberrypi ~/Desktop $
我一直在研究这个项目。但是,每当我尝试使用其他帖子的解决方案时,它要么无法正常工作,要么我无法弄清楚如何将其应用到我的程序中。请尝试理解我刚刚开始编程,并且可能需要其中一个&#34;我不知道我在做什么&#34;解释。
答案 0 :(得分:0)
您在写入文件后关闭文件(f.close()
)。您可能希望flush()
该文件,以便一次性写入所有数据,并且不会将任何内容存储在缓冲区中(这意味着,如果此脚本突然中断或Python被杀死,则不会丢失任何数据)。
顺便说一下,我不认为您正确使用time.sleep
。在else
情况下,您应该调用它(使用time.sleep()
- &gt;使用括号),而不仅仅是sorta &#39;提及&#39; 就像你现在的代码一样。
答案 1 :(得分:0)
您在程序开头打开文件一次,但每次尝试写入时都关闭它。只需在while循环后将调用移至f.close
即可。如果您发现数据没有按照您的预期频繁进入文件,则可能需要添加flush
电话。 E.g:
f = open(...)
while True:
if GPIO.input(26):
import datetime
f.write (time.strftime("\n\n%a %b %d %I:%M:%S %p"))
f.flush()
time.sleep(5)
else:
time.sleep
f.close()