0

Python 2.7では、実行したい:

$ ./script.py initparms.py

initparms.py にはいくつかの python 変数が含まれているため、これは script.py にパラメーター ファイルを提供するトリックです。

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])

もちろん、execまたはの通常の警告がeval適用されます (スクリプトは、信頼されているコードを実行しているか、信頼されていないコードを実行しているかを知る方法がありません)。

私の提案は、あなたがしていることをしないで、代わり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 に答える