0

在 python 2.7 中,我想运行:

$ ./script.py 初始化参数.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 *

不工作。可能差不多了……有什么想法吗?谢谢!

4

3 回答 3

2

您可以使用execfile

execfile(sys.argv[1])

当然,通常的警告与execeval适用(您的脚本无法知道它是否正在运行受信任或不受信任的代码)。

我的建议是不要做你正在做的事情,而是configparser在那里使用和处理配置。

于 2013-04-02T15:34:54.977 回答
2

这是一个单行:

globals().update(__import__(sys.argv[1]).__dict__)
于 2013-04-02T15:52:37.183 回答
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)

有点复杂,但可以完成工作。

于 2013-04-02T15:50:10.670 回答