Python - 批量提升变量到父范围

时间:2013-04-02 15:31:16

标签: python python-2.7

在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 *

不行。几乎可能有......任何想法?谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用execfile

execfile(sys.argv[1])

当然,适用execeval的常见警告(您的脚本无法知道它是运行受信任的代码还是不受信任的代码)。

我的建议是不要做你正在做的事情,而是使用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)

有点复杂,但完成工作。