Python3发布了编辑测试文件的问题
在raspbian中,我试图用Python 3编写一个程序,将所有运动记录在一个文本文件中。Python3发布了编辑测试文件的问题,python,python-3.x,raspberry-pi2,gpio,Python,Python 3.x,Raspberry Pi2,Gpio,在raspbian中,我试图用Python 3编写一个程序,将所有运动记录在一个文本文件中。 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
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 $
附言:
我正在使用一个连接到GPIO 26的PIR传感器,
文本文件名为Test.txt
我的程序工作正常,直到第二次触发传感器。在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 $
pi@raspberrypi~/Desktop$sudo python MotionSensorLogtest.py
回溯(最近一次呼叫最后一次):
文件“MotionSensorLogtest.py”,第10行,在
f、 写入(time.strftime(“\n\n%a%b%d%I:%M:%S%p”))
ValueError:对关闭的文件执行I/O操作
pi@raspberrypi~/Desktop$
我在这个项目上工作了很长时间。但是,每当我尝试使用另一篇文章的解决方案时,它要么不起作用,要么我不知道如何在我的程序中实现它。请试着理解我刚刚开始编程,可能需要一个“我不知道我在做什么”的解释
谢谢,在此问题上的任何帮助都将不胜感激。您在写入文件后将关闭该文件(f.close()
)。您可能希望flush()
文件,以便一次写入所有数据,并且不会在缓冲区中存储任何内容(这意味着,如果此脚本突然中断或Python被杀死,则不会丢失任何数据)
顺便说一下,我认为你没有正确地使用时间。睡眠。在
else
的情况下,您应该调用它(使用time.sleep()
->使用括号),而不是像在当前代码中那样“提及”它。您可以在程序开始时打开一次文件,然后在每次尝试写入时关闭它。只需将调用移动到f.close
到while循环之后。如果发现数据没有像预期的那样频繁地进入文件,您可能需要添加一个flush
调用。例如:
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()
您正在关闭循环中的文件,然后尝试在另一次迭代中再次写入该文件。在此处调用
f.close()
对我来说没有多大意义,因为如果没有异常终止,此循环将永远运行,因此f.close()
将永远不会被调用。@ForceBru在这个代码示例中您是对的,但是如果有人更改代码,从而可以在某个点退出循环,那么让关闭
调用是一种很好的做法。此外,我不确定OP是否只是简化了他们的实际代码。@OwenSullivan,很高兴它起到了作用:)