Python 3发布编辑测试文件

时间:2016-01-08 19:27:09

标签: python python-3.x raspberry-pi2 gpio

在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;解释。

谢谢,对此事的任何帮助都将不胜感激。

2 个答案:

答案 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()