我有一个像这样的python脚本文件夹..。
global_variables.py
main.py
helper_1.py
...
helper_n.py我想像这样将参数传递到main.py中:
user$ python main.py arg1 arg2 ...其中,args是global_variables.py中的3-4个变量(不是所有变量;其中定义了大约50个变量)。如果我没有helper.py脚本,我会用main.py实现这一点
import sys
import global_variables
global_variables.var1 = arg1
global_variables.var2 = arg2
...不幸的是,这些更改不会传播到其他helper.py脚本。
解决这个问题的最优雅的解决方案是什么?我所能做的不是使用全局变量,而是手动将所有参数传递给每个python脚本,但是这看起来很可怕,并且考虑到所有脚本的长度(大约4000行代码),我需要花费几个小时和几个小时(包括调试时间)。
基本上,我想要的是:
user$ python main.py arg1 arg2 ...首先是更新global_variables.py中的变量,然后是,然后是运行main.py。也许这是可能的?
发布于 2017-06-30 01:20:33
不确定这是否正确地反映了您的项目设置,但这种简单的方法如预期的那样工作:
main.py
import sys
import global_vars
global_vars.x = sys.argv[1]
print "main: %s" % global_vars.x
import helper
helper.f()helper.py
import global_vars
print "helper: %s" % global_vars.x
def f():
print "helper: f: %s" % global_vars.xglobal_vars.py
x = "<initial value>"当被称为:
$ python main.py X产出:
main: X
helper: X
helper: f: X稍微“延迟”的import helper确保所有helper.py模块代码也能看到更新的global_vars值。
发布于 2017-06-30 01:05:02
我不确定这正是您想要做的,但是您可以使用shelve模块创建一个搁置,您可以将所有的全局数据作为密钥存储在其中吗?
像这样吗?
# main script
import shelve
myglobals = shelve.open("myglobals")
myglobals['varname1'] = value1
myglobals['varname2'] = value2
myglobals.close()然后在其他脚本中访问“globals”:
# helper script
import shelve
myglobals = shelve.open("myglobals")
value1 = myglobals['varname1']
value2 = myglobals['varname2']
myglobals.close()https://stackoverflow.com/questions/44836552
复制相似问题