如何在另一个脚本

时间:2015-04-23 14:26:45

标签: python file variables python-3.x import

我想提取一个名为value的变量,该变量是在第二个任意选择的python脚本中设置的。

当在pyhton的交互模式下手动执行时,该过程有效,但是当我从命令行运行主脚本时,value未导入。

主脚本的输入参数已成功转发,但value似乎位于已执行脚本的本地范围内。

我已经尝试在主脚本中定义value,并且还尝试将其可访问性设置为全局。

这是我到目前为止的脚本

import sys
import getopt

def main(argv):
    try:
        (opts, args) = getopt.getopt(argv, "s:o:a:", ["script=", "operations=", "args="])
    except getopt.GetoptError as e:
        print(e)
        sys.exit(2)

    # script to be called
    script = ""

    # arguments that are expected by script
    operations = []
    argv = []

    for (opt, arg) in opts:

        if opt in ("-o", "--operations"):
            operations = arg.split(',')
            print("operations = '%s'" % str(operations))

        elif opt in ("-s", "--script"):
            script = arg;
            print("script = '%s'" % script)

        elif opt in ("-a", "--args"):
            argv = arg.split(',')
            print("arguments = '%s'" % str(argv))

    # script should define variable 'value'
    exec(open(script).read())
    print("Executed '%s'. Value is printed below." % script)
    print("Value = '%s'" % value)

if __name__ == "__main__":
    main(sys.argv[1:])

3 个答案:

答案 0 :(得分:1)

如果您的导入需要是动态的,您可以使用

impmodule = __import__("modulename") # no .py suffix needed

然后通过

引用value
impmodule.value 

有几种方法可以达到相同的效果。 请参阅SO

上有关此主题的answers

答案 1 :(得分:1)

value变量已由exec放入您的本地词典中,但编译器无法看到。您可以像这样检索它:

print("Value = '%s'" % locals()['value'])

我更喜欢import解决方案

答案 2 :(得分:0)

使用locals()作为@cdarke建议产生了正确的结果!

exec(open(script).read())
print("Executed '%s'. Value is printed below." % script)

print("Value = '%s'" % locals()['value'])