2Comware扩展Python API

本文描述在Comware V7中提供的扩展Python API,扩展Python API必须遵循标准Python语言语法。

2.1  CLI

用来执行Comware V7系统的命令并创建CLI对象。

【命令】

CLI(command=‘’, do_print=True)

【参数】

command:表示要下发的命令,缺省为空。CLI下发命令是从用户视图开始,如果command中不指定视图,直接输入命令,表示该命令在用户视图下执行;当需要执行其它视图的命令时,需要先输入进视图的命令,再输入具体的配置命令。多条命令之间以空格加分号分隔,如’system-view ;local-user test class manage’。

do_print:表示是否输出执行结果,True表示输出执行结果,False表示不输出执行结果。缺省值为True。

【返回值】

CLI对象

【使用指导】

需要注意的是,CLI仅支持Comware命令,不支持Linux、Python、Tcl命令。

【举例】

# 使用API CLI添加本地用户test。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.CLI('system-view
;local-user test class manage')

【结果】

system-view
System View: return to User View with Ctrl+Z.
[Sysname] local-user test class manage
New local user added.

用来获取下载文件过程中的错误信息。

【命令】

Transfer.get_error()

【返回值】

下载文件过程中的错误信息,若没有错误信息则返回None。

【举例】

# 使用API Transfer将TFTP服务器(1.1.1.1)上的文件test.cfg下载到设备上。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> c = platformtools.Transfer('tftp',
'1.1.1.1', 'test.cfg', 'flash:/test.cfg', user='', password='')
>>> c.get_error()

【结果】

“Timeout was reached”

用来获取命令执行的输出信息。

【命令】

CLI.get_output()

【返回值】

命令执行的输出信息。

【举例】

# 使用API CLI添加本地用户,并输出命令行执行结果。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> c = platformtools.CLI('system-view
;local-user test class manage', False)
>>> c.get_output()

【结果】

['system-view',
'System View: return to User View with Ctrl+Z.', '[Sysname]local-user test class manage', 'New local user added.']

get_self_slot接口用来获取主用主控板所在的槽位号。(独立运行模式)

get_self_slot接口用来获取全局主用主控板所在的槽位号。(IRF模式)

【命令】

get_self_slot()

【返回值】

返回一个列表对象,格式为:[-1,slot-number],其中slot-number表示主用主控板所在的槽位号。(独立运行模式)

返回一个列表对象,格式为:[chassis-number,slot-number],其中:chassis-number表示全局主控板所在设备的成员编号,slot-number表示全局主控板在成员设备上的槽位号。(IRF模式)

【举例】

# 使用API获取主用主控板所在的槽位号。(独立运行模式)

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.get_self_slot()

【结果】

[-1,0]

get_slot_info接口用来获取指定单板的信息。

【命令】

get_slot_info()

【返回值】

返回一个字典对象,返回值始终为{'Slot': slot-number, 'Status': 'status', 'Chassis': chassis-number, 'Role': 'role', 'Cpu': CPU-number }。slot-number表示单板所在的槽位号,status表示单板的状态,chassis-number表示设备在IRF中的成员编号,role表示单板的角色,CPU-number表示单板上主CPU的编号。

【举例】

# 使用API获取成员编号/槽位号信息。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.get_slot_info(1)

【结果】

{'Slot': 1, 'Status': 'Normal',
'Chassis': 0, 'Role': 'Master', 'Cpu': 0}

get_slot_range接口用来获取当前系统所支持的槽位号范围。

【命令】

get_slot_range()

【返回值】

返回一个字典对象,返回值始终为{'MaxSlot': max-slot-number, 'MinSlot': min-slot-number }。max-slot-number表示设备支持的最大槽位号,min-slot-number表示设备支持的最小槽位号。

【举例】

# 使用API获取系统槽位号范围。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.get_slot_range()

【结果】

{'MaxSlot': 71, 'MinSlot': 0}

get_standby_slot接口用来获取所有备用主控板所在的槽位号。(独立运行模式)

get_standby_slot接口用来获取所有全局备用主控板所在的槽位号。(IRF模式)

【命令】

get_standby_slot()

【返回值】

返回一个列表对象,格式为:[[-1,slot-number]],其中slot-number表示备用主控板所在的槽位号。如果设备上没有备用主控板,则返回[

]。(独立运行模式)

返回一个列表对象,格式为:[[chassis-number,slot-number]],其中:chassis-number表示全局备用主控板所在设备的成员编号,slot-number表示全局备用主控板在成员设备上的槽位号。如果IRF中没有全局备用主控板,则返回[ ];当IRF中有多个全局备用主控板时,则返回:[[chassis-number1,slot-number1],[chassis-number2,slot-number2],……]。(IRF模式)

【举例】

# 使用API获取备用主控板所在的槽位号。(独立运行模式)

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.get_standby_slot()

【结果】

[]

用来将指定文件通过指定协议下载到本地。

【命令】

Transfer(protocol=‘’, host=‘’, source=‘’, dest=‘’, vrf=‘’,login_timeout=10, user=‘’, password=‘’)

【参数】

protocol:表示下载文件时使用的协议。取值为:

·     ftp:表示使用FTP协议传输文件。

·     tftp:表示使用TFTP协议传输文件。

·     http:表示使用HTTP协议传输文件。

host:表示远程服务器的IP地址。

source:表示服务器上源文件的名称。

dest:表示保存到本地的目的文件的名称。

vrf:指定目的端所属的MPLS L3VPN的VPN实例名称,为1~31个字符的字符串,区分大小写。如果未指定本参数,则表示目的端位于公网中。

login_timeout:表示下载文件时登录的超时时间,单位为秒,缺省值为10。

user:表示登录时使用的用户名称。

password:表示登录时使用的用户密码。

【返回值】

Transfer对象

【举例】

# 使用API Transfer将TFTP服务器(192.168.1.26)上的文件test.cfg下载到设备上。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> platformtools.Transfer('tftp',
'192.168.1.26', 'test.cfg', 'flash:/test.cfg', user='', password='')

【结果】

用来生成并发送日志信息。

【命令】

SYSLOG.send(digest=‘’, info=‘’, priority=‘’)

【参数】

digest:表示日志助记符,为1~32个字符的字符串,区分大小写。

info:日志内容,为1~1024个字符的字符串,区分大小写。

priority:表示日志优先级,取值范围为0~4294967295。

【返回值】

无。

【使用指导】

当需要使用Python生成并发送日志时,请先使用SYSLOG API创建SYSLOG对象,并指定日志所属模块,再使用API send指定日志参数、生成并发送日志。有关日志信息的格式的详细介绍,请参见“网络管理和监控配置指导”中的“信息中心”。

要使当前终端能够显示日志信息,请先在用户视图下执行terminal monitor命令。

【举例】

# 配置允许当前终端显示日志信息,然后使用API生成并发送一条SNMP模块的日志:日志助记符为Test、日志信息为“Try to send one message.”、日志优先级为1000。

terminal monitor
 python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> a = platformtools.SYSLOG('snmp')
>>> a.send('Test','Try to send one message.',1000)

【结果】

>>> %Jan  1 06:24:17:908 2019 Sysname SNMP/0/Test: Try to send one message.

用来创建SYSLOG对象。

【命令】

SYSLOG(module=‘’)

【参数】

module:表示产生日志的模块名,为1~8个字符的字符串,不区分大小写。

【返回值】

无。

【使用指导】

创建的SYSLOG对象用于发送指定模块的日志。

【举例】

# 为SNMP模块创建SYSLOG对象,并赋值给变量a。

python
Python 2.7.3 (default)
[GCC 4.4.1] on linux2
Type "help",
"copyright", "credits" or "license" for more information.
>>> import platformtools
>>> a = platformtools.SYSLOG('snmp')
>>> a

【结果】