为什么我的脚本不向文件写入内容?
Why doesn't my script write content to the file?
我在 Python 中写了一个脚本,一旦我执行它并按下连接到我 Raspberry Pi 上的 GPIO 的按钮应该:
- 打印'it works!'
- 创建一个名为 'it_works.txt' 的文件,内容为 'yay!'
脚本确实打印了 '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'
我在 Python 中写了一个脚本,一旦我执行它并按下连接到我 Raspberry Pi 上的 GPIO 的按钮应该:
- 打印'it works!'
- 创建一个名为 'it_works.txt' 的文件,内容为 'yay!'
脚本确实打印了 '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'