无法修改跨模块变量

Can't modify a cross module variable

我正在用 raspi 和雨量传感器做一个家庭项目。

基本上,对于 cronjobs,我 运行 isitraining.py 每 30 分钟。

如果正在下雨,我希望它增加另一个模块的特定变量 (rains.water)

如果雨停了,我希望它减少相同的变量。

这是我的代码:

rains.py

water=0

isitraining.py

import RPi.GPIO as GPIO
import rains
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def raincounter():
    if (GPIO.input(4) and (0<rains.water<13)):
        rains.water-=1 #No Rain
    elif (GPIO.input(4)==0 and (0<rains.water<13)):
        rains.water+=1 #Rain

testscript.py

import rains
import isitraining

isitraining.raincounter()
print (rains.water)

每次我 运行 第一次使用“testscript.py”时,它确实会修改“rains.water”变量但只有一次,如果我 运行之后的任何其他时间脚本,它的值都不会增加或减少。

仅供参考 gpio.input(4)是数字输入的雨量传感器。高时表示没有下雨,低时表示正在下雨。

有什么想法吗?

每次 testscript.py 运行时,它都会从头开始导入 isitraining.py,然后从头导入 rains.pyrains.py 及其持有的 water 值不会在运行中持续存在。

如果要保存该值,需要手动将其写入磁盘,然后在需要使用时加载它。像这样:

isitraining.py:

import RPi.GPIO as GPIO
import rains
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def raincounter():
    if (GPIO.input(4) and (0<rains.water<13)):
        return rains.alter_rain(-1) #No Rain
    elif (GPIO.input(4)==0 and (0<rains.water<13)):
        return rains.alter_rain(1)

rains.py:

FILE_NAME = "rain_record.txt"

def alter_rain(n):
    with open(FILE_NAME, "r") as f:
        current_value = int(f.read())  # Get saved value

    current_value += n  # Alter it

    with open(FILE_NAME, "w") as f:
        f.write(str(current_value))  # Write the altered value back

    return current_value  # And return it so the caller knows the current value

testscript.py

import rains
import isitraining

new_val = isitraining.raincounter()
print (new_val)

您可以将对 open 的两次调用结合起来,并且还应该包括错误处理,但这显示了总体思路。您不能像您尝试做的那样使用简单的脚本来充当您的数据库。如果你想保存一些东西,你需要自己保存。