问题描述
我写了我的第一个python脚本,它使用configparser读取了一个ini文件。
首先我的ini文件是这样定义的:
;ini
[hypervisor1]
name = hyp1
how = ssh
vms = vm1 vm2 vm3
[hypervisor2]
name = hyp2
how = vpn
vms = vm4 vm5 vm6
其次,我的脚本:
import configparser
import os.path
import argparse
file_path = os.path.join(os.path.dirname(__file__),"config.ini")
parser = configparser.SafeConfigParser()
parser.read(file_path)
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("--vm", help="display info")
args = parser.parse_args()
vm = args.vm
return vm
vm = get_args()
def print_hyp(name_s):
for info in parser.sections():
for key, value, in parser.items(info):
for value in value.split(): # split whitespace vms value
if (value == name_s):
global info_s
info_s = info
print(name_s, "is deployed on", info)
if (print_hyp):
print_hyp(vm)
name = parser.get(info_s, 'name')
how = parser.get(info_s, 'how')
print("Name:", name)
print("How:", how)
所以我需要获取属于值的部分:函数print_hyp。 当我得到它时,我必须打印其他键及其值。
我确定我的脚本很丑陋,该如何改进?
而且我没有错误管理,例如,输出不存在的vm:
./script.py --vm stackoverflow
Traceback (most recent call last): File "script.py", line 43, in <module>
name = parser.get(info_s, 'name')
NameError: global name 'info_s' is not defined
一样,没有争论。
你可以帮帮我吗?
非常感谢!
1楼
我会补充
vm = get_args()
print('vm', vm) # to verify vm arg is what you want
if
这没有道理:
如果(print_hyp):print_hyp(vm)...
您是否想要类似if vm is not None:
print_hyp(name_s)
不返回任何内容。
在打印一些东西。
使用global info_s
是不明智的。
我很少使用global,所以我什至不记得是否也必须在函数外部对其进行初始化。
我认为您的函数应该返回它或它的值列表,而不是使用global
。
您还应该使用if __name__=='__main__
:`。
如果您不知道这是什么目的,建议您阅读一些基本的脚本布局文档。