Почему мой сценарий не записывает содержимое в файл? - PullRequest
0 голосов
/ 06 ноября 2018

Я написал скрипт на Python, который после его запуска и нажатия кнопки, связанной с GPIO на моем Raspberry Pi, должен:

  • Распечатать 'это работает!'
  • Создайте файл с именем «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 голосов
/ 06 ноября 2018

Используя текущий код yì, который вы указали, вы правильно настроили вывод GPIO, а затем ваш главный включается в цикл, где он продолжает открывать файл в режиме «записи», но вы никогда не закроете его должным образом. Добавьте строку file.close() после объявления with:

с открытым ("it_works.txt", "w") в виде файла:

    file.write("yay!")

    main()

file.close ()

(УХОД ЗА ИНДЕНТАЦИЕЙ)

Кроме того, когда вы открываете файл в python с опцией 'w', он усекает содержимое файла. Я не знаю, относится ли это к вам. Я бы предложил 'r +' или 'a'

0 голосов
/ 06 ноября 2018

Похоже, вы пытались снова вызвать main внутри оператора with - так сказать, рекурсивный вызов.

Почему вы звоните main снова?

Также то, что вы, вероятно, хотите сделать, это добавить к существующему файлу - если файл существует. Здесь предлагается режим «а».

0 голосов
/ 06 ноября 2018

Я не знаю, что такое пакет 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()
0 голосов
/ 06 ноября 2018

файл никогда не закрывается, оператор with открывает файл для записи, поэтому вы видите, что он создается, но перед его закрытием вы снова вызываете main(), в течение которого он открывается снова и снова рекурсивно .

Я не знаком с работой GPIO, поэтому я не уверен в вашем случае использования, но стараюсь избегать выполнения вышеупомянутого

...