在python 2.7中,我想运行:
$ ./script.py initparms.py
这是向script.py提供参数文件的技巧,因为initparms.py包含几个python变量,例如。
Ldir = '/home/marzipan/jelly'
LMaps = True
# etc.
script.py包含:
X = __import__(sys.argv[1])
Ldir = X.Ldir
LMaps = X.Lmaps
# etc.
我想在X中对变量进行批量升级,以便它们可供script.py使用,而无需手动拼写代码中的每一个。
像
这样的事情import __import__(sys.argv[1])
或
from sys.argv[1] import *
不行。几乎可能有......任何想法?谢谢!
答案 0 :(得分:2)
您可以使用execfile
:
execfile(sys.argv[1])
当然,适用exec
或eval
的常见警告(您的脚本无法知道它是运行受信任的代码还是不受信任的代码)。
我的建议是不要做你正在做的事情,而是使用configparser
并在那里处理配置。
答案 1 :(得分:2)
这是一个单行:
globals().update(__import__(sys.argv[1]).__dict__)
答案 2 :(得分:1)
你可以这样做:
import os
import imp
import sys
try:
module_name = sys.argv[1]
module_info = imp.find_module(module_name, [os.path.abspath(os.path.dirname(__file__))] + sys.path)
module_properties = imp.load_module(module_name, *module_info)
except ImportError:
pass
else:
try:
attrlist = module_properties.__all__
except AttributeError:
attrlist = dir(module_properties)
for attr in attrlist:
if attr.startswith('__'):
continue
globals()[attr] = getattr(module_properties, attr)
有点复杂,但完成工作。