Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Can';t修改跨模块变量_Python 3.x_Variables_Module - Fatal编程技术网

Python 3.x Can';t修改跨模块变量

Python 3.x Can';t修改跨模块变量,python-3.x,variables,module,Python 3.x,Variables,Module,我正在用一个raspi和一个雨量传感器做一个家庭项目 基本上,对于cronjobs,我每30分钟运行一次isitraining.py 如果下雨,我希望它从另一个模块(rains.water)中增加一个特定变量 如果雨停了,我希望它减少相同的变量 这是我的密码: rains.py water=0 import RPi.GPIO as GPIO import rains GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.

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

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

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

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

这是我的密码:

rains.py

water=0
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
import rains
import isitraining

isitraining.raincounter()
print (rains.water)
import rains
import isitraining

new_val = isitraining.raincounter()
print (new_val)
isitraining.py

water=0
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
import rains
import isitraining

isitraining.raincounter()
print (rains.water)
import rains
import isitraining

new_val = isitraining.raincounter()
print (new_val)
每次我第一次运行“testscript.py”时,它都会修改“rains.water”变量,但只有一次,如果我在之后的任何时间运行脚本,它的值不会增加或减少

供参考 gpio.input(4)是带有数字输入的雨量传感器。当天气高的时候,意味着没有雨;当天气低的时候,意味着正在下雨


有什么想法吗?

每次运行
testscript.py
时,它都从零开始导入
isitraining.py
fresh,然后从头开始导入
rains.py
fresh
rains.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)
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

water=0
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
import rains
import isitraining

isitraining.raincounter()
print (rains.water)
import rains
import isitraining

new_val = isitraining.raincounter()
print (new_val)
您可以将这两个调用组合到
open
,还应该包括错误处理,但这显示了一般的想法。您不能像试图做的那样使用简单的脚本作为数据库。如果你想保存一些东西,你需要自己保存