Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3发布了编辑测试文件的问题_Python_Python 3.x_Raspberry Pi2_Gpio - Fatal编程技术网

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

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

在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:%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,很高兴它起到了作用:)