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

Why doesn't my script write content to the file?

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

脚本确实打印了 'it works!' 并创建了文件,但是一旦我打开它,内容就丢失了。 这是脚本:

#!/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没有经验,所以我不能说我是否写错了。任何帮助将不胜感激,非常感谢!

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

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

看起来您试图再次在 with 语句中调用 main - 可以说是递归调用。

你为什么又打电话给main

另外,您可能想要做的是附加到现有文件 - 如果该文件存在。这里建议模式"a"。

我不知道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()

使用您提供的当前 yì 代码,您正确设置了 GPIO 的引脚,然后您的 main 进入一个循环,它继续以 'write' 模式打开文件,但您从未正确关闭它.在 with 声明后添加 file.close() 行:

with open("it_works.txt", "w") as file:

    file.write("yay!")

    main()

file.close()

(注意缩进)

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