我有2个脚本,比如test.py
和main.py
我的test.py
只包含词典(没有其他代码)。
我通过传递dict_name作为参数来运行main.py
。在这里,我想从test.py
获取作为参数传递的dict,并在main.py
中显示它的内容。
test.py
config_123={"name":"Dave","age":25}
config_89033 = {"name":"alex","age":30}
.....
运行main.py
(注意:这里我用点传递第一个参数)
python main.py 1.2.3
main.py
import sys
from test import *
if __name__ == '__main__':
if len(sys.argv) != 2:
print "error message"
sys.exit(1)
else:
dict_name=sys.argv[1]
#if dict_name contains '.' , replace it
if '.' in dict_name:
temp_name=dict_name.replace(".","") #gives me 123
else:
temp_name = dict_name
#here i want to print the content of dict from test.py
print config_123 #it prints dict (as i am importing * from test)
#but i need to create it dynamically.
print "config_"+temp_name #obviously it prints it as a string "config_123"
#how should i call it here?
在这种情况下,如何从config_123
拨打test.py
并显示字典?
答案 0 :(得分:1)
使用import test
导入模块并在模块上使用getattr()
:
import test
print getattr(test, 'config_123')
输出:
{'age': 25, 'name': 'Dave'}
或者在你的情况下:
print getattr(test, 'config_' + temp_name )
答案 1 :(得分:1)
我不确定这是否是最佳方式,但它似乎有用。
您可以使用内置的locals()函数将任何局部变量作为字典。然后,dict的get函数似乎得到了正确的配置:
git push <remote> <branch> --force
输出如下:
import sys, test
dname = sys.argv[1]
config1 = {'name':'Bob'}
config2 = {'name':'Alice'}
#if the variable is local
print locals().get(dname, None)
#if it's in the test module
#config = getattr(test, dname)
答案 2 :(得分:1)
您还可以将配置存储为一个键入其名称的字典,然后从那里获取。
test.py
=======
configs = {'config_123': {"name":"Dave","age":25},
'config_89033': {"name":"alex","age":30}}
main.py
=======
from test import configs
config = configs.get('config_123')