Python 3发布了编辑测试文件的问题



在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()

最新更新