有没有办法在python中保存变量值如果出现电源故障,那么当我再次运行程序时,它不会从初始值开始,而是从最后保存的值开始。在下面的代码中我计算数字按下按钮的次数,我可以保存年龄值,并从15开始的保存值开始计数。
import RPi.GPIO as GPIO
import time
age=15 //initialize for debugging
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN,GPIO.PUD_DOWN)
def led(channel): //funtion for increnment age
global age
age=(age+1)
print(age)
GPIO.add_event_detect(25, GPIO.RISING, callback=led, bouncetime=1000 )
print(age)
try:
while(True):
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print (age)
print ("Exiting")
答案 0 :(得分:0)
执行此操作的典型方法是通过写入和写入文件。您可以在启动程序时从文件中读取程序状态,并在变量状态更改时修改文件。
为了保存更复杂的数据结构,存在Pickle模块。这允许对象被序列化。
答案 1 :(得分:0)
试试这个:
打开终端并输入以下内容以创建名为“led.txt”的文件:
>>>import pickle
>>>s={'age':None}
>>>with open('led.txt','w') as f:
... f.write(pickle.dumps(s))
然后继续你的代码
import RPi.GPIO as GPIO
import time
import pickle
led_age={'age':None} # initialise as dictionary
with open('led.txt') as f: # open file in read mode
led_age = pickle.loads(f.read()) #initialize for debugging
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN,GPIO.PUD_DOWN)
def led(channel):
global led_age
led_age['age'] += 1 # increment value
with open('led.txt','w') as f: # again open the file in write mode
f.write(pickle.dumps(led_age)) #pickle the dictionary and write back to the file
print(led_age)
而不是int变量我使用过字典。
函数led
执行以下操作:
pickle.dumps
将字典序列化为字符串,pickle.loads
执行反序列化
每次调用 led 函数时,此更新将自动执行,led.txt
文件将更新。
注意:pickle的替代品可以是与其他语言兼容的JSON