Python 从模块导入更新的变量
更新模块后,从模块导入变量时遇到问题。我正在使用3个文件:第一个是“主”文件并启动函数,第二个是“设置”文件并包含变量和修改它的函数,第三个是使用变量的“帮助”文件。问题是,当我启动“main”文件,然后启动“setup”中的函数来修改变量时,一切正常。但当我启动“帮助”文件时,它使用了未更新的变量,我无法理解为什么 main.py:Python 从模块导入更新的变量,python,python-import,Python,Python Import,更新模块后,从模块导入变量时遇到问题。我正在使用3个文件:第一个是“主”文件并启动函数,第二个是“设置”文件并包含变量和修改它的函数,第三个是使用变量的“帮助”文件。问题是,当我启动“main”文件,然后启动“setup”中的函数来修改变量时,一切正常。但当我启动“帮助”文件时,它使用了未更新的变量,我无法理解为什么 main.py: from colorama import init from termcolor import colored import subprocess import
from colorama import init
from termcolor import colored
import subprocess
import check_functions_and_setup
init() # starts colorama
while True:
color = check_functions_and_setup.color_main
command = raw_input(colored("Insert function: \n >> ", color))
if (command == "help") or (command == "Help"):
process = subprocess.call('start /wait python help_function.py', shell=True)
elif command == "change color help":
# updates the color in the setup file
check_functions_and_setup.color_help = check_functions_and_setup.change_color_help(check_functions_and_setup.color_list, check_functions_and_setup.color_help, color)
设置:
color_help = "cyan"
color_list = ["grey", "red", "green", "yellow", "blue", "magenta", "cyan", "white"]
def change_color_help(color_list, color_help, color):
input_color = raw_input(colored("Insert new color: \n >> ", color))
if input_color in color_list:
return input_color
else:
print colored("Invalid color", color)
return color_help
帮助:
最后一行是不工作的一行;事实上,即使我成功地从函数中更改了help_颜色,该行也会以与原始color_help变量相同的颜色打印 您正在通过
子流程运行帮助代码。该子进程不会与正在运行main
的父进程共享内存(并且您已经更改了颜色)。不要将帮助代码作为一个单独的进程运行,只需让main
模块import
帮助模块并调用您需要的任何功能即可
以下是您的代码的简化版本:
# main.py
import settings
from help import show_color
while True:
action = raw_input('Action: ')
if action == '':
break
elif action == 'help':
show_color()
else:
settings.set_color()
# settings.py
color = 'cyan'
def set_color():
global color
color = raw_input('Enter new color: ')
# help.py
import settings
def show_color():
print 'help.py: ', settings.color
请注意,您的设计(依赖于更改模块中全局变量的值)相当笨拙和僵硬。几乎可以肯定有更好的方法来处理这种颜色变化。您正在通过子流程运行帮助代码。该子进程不会与正在运行main
的父进程共享内存(并且您已经更改了颜色)。不要将帮助代码作为一个单独的进程运行,只需让main
模块import
帮助模块并调用您需要的任何功能即可
以下是您的代码的简化版本:
# main.py
import settings
from help import show_color
while True:
action = raw_input('Action: ')
if action == '':
break
elif action == 'help':
show_color()
else:
settings.set_color()
# settings.py
color = 'cyan'
def set_color():
global color
color = raw_input('Enter new color: ')
# help.py
import settings
def show_color():
print 'help.py: ', settings.color
请注意,您的设计(依赖于更改模块中全局变量的值)相当笨拙和僵硬。几乎可以肯定,有更好的方法来处理这种颜色变化。您认为这会起什么作用?就我所知,您在help.py
脚本中的任何位置都不会更改color\u help
。您认为这将如何工作?就我所知,您在help.py
脚本中的任何地方都不会更改color\u help
。唯一的问题是,我希望帮助模块在调用帮助功能时打开的另一个终端上运行。我是python语言的新手。我不明白的是,为什么即使我正确调用,帮助模块也不读取设置模块中的变量。@GiampoOrigin,因为您在不同的进程中运行主模块和帮助模块。进程不共享内存空间。这不是Python的问题;这就是电脑的工作方式。如果你想让两个进程共享这样的信息,你需要一种非常不同的方法。哇,我想我终于明白了。多谢了,唯一的问题是我希望帮助模块在另一个终端上运行,当我调用帮助功能时,该终端会打开。我是python语言的新手。我不明白的是,为什么即使我正确调用,帮助模块也不读取设置模块中的变量。@GiampoOrigin,因为您在不同的进程中运行主模块和帮助模块。进程不共享内存空间。这不是Python的问题;这就是电脑的工作方式。如果你想让两个进程共享这样的信息,你需要一种非常不同的方法。哇,我想我终于明白了。谢谢