Rob*_*arr 2 python variables import
我正在尝试为我公司的测试环境构建一个简单的环境检查脚本.我的目标是能够ping为给定测试环境实例定义的每个主机.主机在如下文件中定义:
#!/usr/bin/env python
host_ip = '192.168.100.10'
router_ip = '192.168.100.254'
fs_ip = '192.168.200.10'
Run Code Online (Sandbox Code Playgroud)
如何以可迭代的方式获取所有这些值(即我需要遍历并ping每个IP地址)?
我看过local()和vars(),但尝试做这样的事情:
for key, value in vars():
print key, value
Run Code Online (Sandbox Code Playgroud)
生成此错误:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
我已经能够通过检查dir(local_variables)
不包含'__'字符串的值来提取所有变量的名称,但是我有一个字符串列表,我无法弄清楚如何从字符串到达同名变量的值.
首先,我强烈建议不要这样做.相反,做:
hosts = {
"host_ip": '192.168.100.10',
"router_ip": '192.168.100.254',
"fs_ip": '192.168.200.10',
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地导入模块并正常引用它 - 这提供了一种从任何Python代码访问这些数据的普通标准方法:
import config
for host, ip in config.hosts.iteritems():
...
Run Code Online (Sandbox Code Playgroud)
如果直接做访问的变量,你会得到一堆东西你不想要的:在建宏(__builtins__
,__package__
,等); 设置其他变量时导入的任何内容等.
您还需要确保您运行的上下文与您正在迭代的变量的上下文不同,或者您将在locals()(或vars()或globals中创建新变量( ))当你迭代它时,你会得到"RuntimeError: dictionary changed size during iteration"
.