如何用Python实现Juniper转Aruba交换机命令及字符串变量插入
问题1:Juniper转Aruba命令自动转换功能实现
可行的实现方式有以下几种,按推荐优先级排序:
- 字典映射(首选):适合命令数量多的场景,把Juniper命令作为键、对应Aruba命令作为值预存在字典里,匹配速度快,后续新增/修改命令只需要调整字典内容即可,维护成本极低
- if else判断:仅适合命令数量在10条以内的极简场景,命令量上去后代码会非常冗余,扩展性极差
- 正则匹配+模板拼接:如果命令是带动态参数的非固定字符串,可以用正则提取Juniper命令里的参数,再套入Aruba命令的固定模板生成结果
以下是简单的实现示例:
# 预定义命令映射表,可自行扩充 juniper_to_aruba = { "set system host-name": "host-name", "set system ntp server": "ntp server", "set interfaces ge-0/0/0 disable": "interface 1/0/1 shutdown" } def cmd_transform(juniper_cmd: str): if juniper_cmd in juniper_to_aruba: return juniper_to_aruba[juniper_cmd] return f"未匹配到对应Aruba命令,原命令:{juniper_cmd}" # 测试调用 user_input = input("输入Juniper命令:") print(cmd_transform(user_input))
问题2:字符串插入变量的实现方法
你现有代码有两个问题:一是函数内调用了全局变量set1,没有使用传入的参数;二是system1变量没有传入函数,无法直接调用。字符串插入可以用Python3.6+支持的f-string语法实现,是目前最简洁的方案,修正后的代码如下:
# 把需要用到的两个变量都作为参数传入函数 def Juniper(set_host, syslog_ip): print('host-name', set_host) print('console idle-timeout 600\n' 'console idle-timeout serial-usb 600\n' 'aruba-central disable\n ' 'igmp lookup-mode ip\n' 'console idle-timeout serial-usb 600\n') # 用f-string插入变量,花括号内直接写变量名即可 print(f"logging {syslog_ip} oobm") set1= input('Enter hostname with quotations:\n') system1 = input('Enter system log IP address:') # 调用函数时传入两个参数 Juniper(set1, system1)
如果需要兼容低版本Python,也可以用format语法实现,对应行改为print("logging {} oobm".format(syslog_ip))即可。
内容的提问来源于stack exchange,提问作者pythonhelp
相关产品推荐
相关产品推荐

