我的脚本为什么不将内容写入文件?

时间:2018-11-06 13:00:08

标签: python raspberry-pi gpio

我用Python编写了一个脚本,一旦执行它并按下连接到Raspberry Pi上GPIO的按钮,就应该:

  • 打印“行得通!”
  • 创建一个名为“ it_works.txt”的文件,内容为“ yay!”

该脚本确实打印出“有效!”并创建文件,但是一旦打开它,内容就会丢失。 这是脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

# SET GPIO Button-Pin
gpio = 9

# Main Function
def main():
  value = 0

  while True:

    if not GPIO.input(gpio):
      value += 0.01

    if value > 0:

     if GPIO.input(gpio):
       print "it works!"
       with open("it_works.txt", "w") as file:
           file.write("yay!")
           main()

     time.sleep(0.03)

  return 0

if __name__ == '__main__':
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio, GPIO.IN)
main()

我对Python没有经验,所以我不能说我写错了什么。任何帮助将不胜感激,非常感谢!

4 个答案:

答案 0 :(得分:0)

该文件永远不会关闭,with语句会打开文件进行写入,这就是为什么您看到它正在创建的原因,但是在关闭文件之前,您需要在打开文件的过程中再次调用main()一次又一次地递归。

我不熟悉GPIO的工作原理,所以我不确定您的用例,但请避免执行上述操作

答案 1 :(得分:0)

好像您正在尝试再次在main语句内调用with –可以说是递归调用。

您为什么再次打main

您可能还想添加到现有文件中-如果该文件存在。这里建议使用模式“ a”。

答案 2 :(得分:0)

我不知道RPi.GPIO软件包是什么,但是我认为您在错误的位置一遍又一遍地使用main函数,建议您在写入文件后关闭文件。使用以下代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

# SET GPIO Button-Pin
gpio = 9

# Main Function
def main():
  value = 0

  while True:

    if not GPIO.input(gpio):
      value += 0.01

    if value > 0:

     if GPIO.input(gpio):
       print "it works!"
       with open("it_works.txt", "w") as file:
           file.write("yay!")
           file.close()
     main()

     time.sleep(0.03)

  return 0

if __name__ == '__main__':
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio, GPIO.IN)
main()

答案 3 :(得分:-1)

使用您提供的当前yìcode,正确设置GPIO的引脚,然后您的主电源进入一个循环,在该循环中,它继续以“写入”模式打开文件,但是您从未正确关闭它。在public class mat { public int two(){ return 2; } } 声明之后添加file.close()行:

  

以open(“ it_works.txt”,“ w”)作为文件:

with
     

file.close()

(注意识别)

此外,当您使用“ w”选项在python中打开文件时,它将截断文件的内容。我不知道这是否与您有关。我建议使用“ r +”或“ a”