Python 3.x Can';t修改跨模块变量
我正在用一个raspi和一个雨量传感器做一个家庭项目 基本上,对于cronjobs,我每30分钟运行一次isitraining.py 如果下雨,我希望它从另一个模块(rains.water)中增加一个特定变量 如果雨停了,我希望它减少相同的变量 这是我的密码: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.
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
freshrains.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
,还应该包括错误处理,但这显示了一般的想法。您不能像试图做的那样使用简单的脚本作为数据库。如果你想保存一些东西,你需要自己保存