如何在从另一个脚本中执行 python 脚本后动态导入变量
How to dynamically import variables after executing python script from within another script
我想提取一个名为 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:])
如果您的导入需要动态,您可以使用
impmodule = __import__("modulename") # no .py suffix needed
然后通过
参考value
impmodule.value
有多种方法可以达到相同的效果。
在 SO
上查看关于此主题的 answers
按照@cdarke 的建议使用locals()
产生了正确的结果!
exec(open(script).read())
print("Executed '%s'. Value is printed below." % script)
print("Value = '%s'" % locals()['value'])
value
变量已由 exec
放入您的 locals 字典中,但对编译器不可见。您可以像这样检索它:
print("Value = '%s'" % locals()['value'])
我更喜欢 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:])
如果您的导入需要动态,您可以使用
impmodule = __import__("modulename") # no .py suffix needed
然后通过
参考value
impmodule.value
有多种方法可以达到相同的效果。 在 SO
上查看关于此主题的 answers按照@cdarke 的建议使用locals()
产生了正确的结果!
exec(open(script).read())
print("Executed '%s'. Value is printed below." % script)
print("Value = '%s'" % locals()['value'])
value
变量已由 exec
放入您的 locals 字典中,但对编译器不可见。您可以像这样检索它:
print("Value = '%s'" % locals()['value'])
我更喜欢 import
解决方案