Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在从另一个脚本中执行python脚本后动态导入变量_Python_File_Variables_Python 3.x_Import - Fatal编程技术网

如何在从另一个脚本中执行python脚本后动态导入变量

如何在从另一个脚本中执行python脚本后动态导入变量,python,file,variables,python-3.x,import,Python,File,Variables,Python 3.x,Import,我想提取一个名为value的变量,该变量是在第二个任意选择的python脚本中设置的 在pyhton的交互模式下手动执行时,该过程可以工作,但是当我从命令行运行主脚本时,value不会被导入 主脚本的输入参数已成功转发,但value似乎在已执行脚本的本地范围内 我已经尝试在主脚本中定义value,还尝试将其可访问性设置为全局 这是我到目前为止的剧本 导入系统 导入getopt def总管(argv): 尝试: (opts,args)=getopt.getopt(argv,“s:o:a:”,[“s

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

在pyhton的交互模式下手动执行时,该过程可以工作,但是当我从命令行运行主脚本时,
value
不会被导入

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

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

这是我到目前为止的剧本

导入系统 导入getopt def总管(argv): 尝试: (opts,args)=getopt.getopt(argv,“s:o:a:”,[“script=”,“operations=”,“args=”) 除了getopt.GetoptError作为e: 打印(e) 系统出口(2) #要调用的脚本 script=“” #脚本所需的参数 操作=[] argv=[] 对于选项中的(opt,arg): 如果选择加入(“-o”,“--operations”): operations=arg.split(“,”) 打印(“操作='%s'%str(操作)) elif选择加入(“-s”、“脚本”): script=arg; 打印(“脚本=“%s%”%script) elif选择加入(“-a”,“-args”): argv=arg.split(',') 打印(“参数='%s'%str(argv)) #脚本应定义变量“value” exec(打开(脚本).read()) 打印(“已执行“%s”。值打印在下面。”%script) 打印(“值='%s'”%Value) 如果名称=“\uuuuu main\uuuuuuuu”: main(sys.argv[1:])
如果需要动态导入,可以使用

impmodule = __import__("modulename") # no .py suffix needed
然后通过以下步骤参考
value

impmodule.value 
有几种方法可以达到相同的结果。 如@cdarke建议使用
locals()
生成正确的结果,请参见本主题上的

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

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

exec
已将
value
变量放入本地词典,但编译器不可见。您可以这样检索它:

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

我更喜欢
导入
解决方案

以什么方式失败?具体点。错误类型、消息、意外行为等等。您是否尝试过导入?这通常比我编辑的问题更安全。我的意思是,该值不是导入的。如果需要动态导入,请使用
impmodule=\uuu import\uuuu(“modulename”)
然后通过
impmodule.value
参考
value
,使用
locals()['value']可以在
exec
之后获得值
确保从作为参数提供的模块文件名中省略.py后缀。我使用变量
script
作为参数,因此它包含后缀,这是错误吗?是的,我认为是。尝试硬编码模块名称而不使用。py@mike:
如果script.endswith('.py'):script=script[:-3]
问题似乎是导入的脚本缺少正确设置的环境。它抱怨没有定义
名称“操作”
。可以在中设置更多参数。