• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 关于我们

23-可编程网络管理配置指导

目录

03-Python配置

本章节下载 03-Python配置  (245.79 KB)

03-Python配置


1 Python

说明

不同设备进入Python shell后显示的Python版本号等提示信息可能不同,请以设备的实际显示为准。本文中忽略该类信息。

 

1.1  Python简介

Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现了面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

在本设备上可以采用如下方式使用Python:

·     通过执行Python脚本进行自动化配置系统。

·     进入Python shell,使用Python2.7版本的命令、标准API或扩展API对设备进行配置。其中,扩展API是本设备对Python进行的扩展,用来方便用户进行系统配置。关于本设备的Python扩展,可以参考“扩展Python API”。

1.2  执行Python脚本文件

请在用户视图下执行本命令,执行Python脚本文件。

python filename

1.3  进入Python shell

请在用户视图下执行本命令,进入Python shell。

python

1.4  导入platformtools包以使用扩展API

用户如需使用扩展Python API,必须先导入platformtools包。导入时,可选择导入整个platformtools包或单个API。设备的系统启动软件包中已经包含了platformtools包,无需额外下载。

1.4.1  导入platformtools包并执行扩展API

1. 配置步骤

(1)     请在用户视图下执行本命令,进入Python shell。

python

(2)     导入platformtools包。

import platformtools

(3)     执行扩展API。

platformtools.api

2. 配置举例

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

<Sysname> python

>>> import platformtools

>>> platformtools.Transfer('tftp', '192.168.1.26', 'test.cfg', 'flash:/test.cfg', user='', password='')

<platformtools.Transfer object at 0xb7eab0e0>

1.4.2  导入单个API函数并执行该函数

1. 配置步骤

(1)     请在用户视图下执行本命令,进入Python shell。

python

(2)     导入单个API函数。

from platformtools import api-name

(3)     执行扩展API函数。

api-function

2. 配置举例

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

<Sysname> python

>>> from platformtools import Transfer

>>> Transfer('tftp', '192.168.1.26', 'test.cfg', 'flash:/test.cfg', user='', password='')

<platformtools.Transfer object at 0xb7e5e0e0>

1.5  退出Python shell

请在Python shell下执行本命令,退出Python shell。

exit()

1.6  Python典型配置举例

1.6.1  Python基础配置举例

1. 组网需求

使用Python脚本,下载main.cfg和backup.cfg两个配置文件到设备上,并设置为下次主用配置文件和备用配置文件。

2. 组网图

图1-1 Python典型配置举例组网图

3. 配置步骤

# 在PC上使用写字板编辑Python脚本文件test.py,内容如下:

#!usr/bin/python

import platformtools

 

platformtools.Transfer('tftp', '192.168.1.26', 'main.cfg', 'flash:/main.cfg')

platformtools.Transfer('tftp', '192.168.1.26', 'backup.cfg', 'flash:/backup.cfg')

platformtools.CLI('startup saved-configuration flash:/main.cfg main ;startup saved-configuration flash:/backup.cfg backup')

# 通过TFTP将test.py文件下载到设备上

<Sysname> tftp 192.168.1.26 get test.py

# 执行Python脚本文件

<Sysname> python flash:/test.py

<Sysname>startup saved-configuration flash:/main.cfg main

Please wait...... Done.

<Sysname>startup saved-configuration flash:/backup.cfg backup

Please wait...... Done.

4. 验证结果

# 使用display startup命令查看下次启动文件已经变为main.cfg和backup.cfg。

<Sysname> display startup

MainBoard:

 Current startup saved-configuration file: flash:/startup.cfg

 Next main startup saved-configuration file: flash:/main.cfg

 Next backup startup saved-configuration file: flash:/backup.cfg


2 扩展Python API

本章节描述本设备提供的扩展Python API,扩展Python API必须遵循标准Python语言语法。

2.1  channel

用来执行本设备支持的命令行并创建channel对象。

【命令】

channel(command=‘’)

【参数】

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

【返回值】

命令执行的输出信息,为列表对象。

【使用指导】

channel仅支持本设备出厂时携带的命令,不支持执行Linux、Python或Tcl等外部系统或脚本语言的命令。

channel一般用于自动化测试。

channel返回的列表对象中可能含有十六进制隐藏字符,例如0x08。如果要避免显示隐藏字符,可以使用API CLI;或者通过Python的for语句循环输出channel的执行结果,例如:

<Sysname> python

>>> import platformtools

>>> c = platformtools.channel('display device')

>>> for value in c:

...  print value

...

display device

 Slot No.  Board type            Status       Primary    SubSlots

 ---------------------------------------------------------------------

 0         Device                Normal       Master     1

<Sysname>

【举例】

# 使用API channel显示设备信息。

<Sysname> python

>>> import platformtools

>>> platformtools.channel('display device')

【结果】

['display device', ' Slot No.  Board type            Status       Primary    SubSlots', ' ---------------------------------------------------------------------', ' 0         Device     Normal       Master     1', '<Sysname>']

2.2  CLI

用来执行本设备支持的命令行并创建CLI对象。

【命令】

CLI(command=‘’, do_print=True)

【参数】

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

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

【返回值】

CLI对象

【使用指导】

请注意,该CLI仅支持本设备出厂时携带的命令,不支持执行Linux、Python或Tcl等外部系统或脚本语言的命令。

【举例】

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

<Sysname> python

>>> import platformtools

>>> platformtools.CLI('system-view ;local-user test class manage')

【结果】

<Sysname> system-view

System View: return to User View with Ctrl+Z.

[Sysname] local-user test class manage

New local user added.

<platformtools.CLI object at 0xb7f680a0>

2.3  get_error

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

【命令】

Transfer.get_error()

【返回值】

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

【举例】

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

<Sysname> python

>>> import platformtools

>>> c = platformtools.Transfer('tftp', '1.1.1.1', 'test.cfg', 'flash:/test.cfg', user='', password='')

>>> c.get_error()

【结果】

'Timeout was reached'

2.4  get_output

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

【命令】

CLI.get_output()

【返回值】

命令执行的输出信息

【举例】

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

<Sysname> python

>>> import platformtools

>>> c = platformtools.CLI('system-view ;local-user test class manage', False)

>>> c.get_output()

【结果】

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

2.5  get_self_slot

get_self_slot接口用来获取主用主控板所在的槽位号。‌

【命令】

get_self_slot()

【返回值】

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

【举例】

# 使用API获取主用主控板所在的槽位号/主设备所在的成员编号。‌‌

<Sysname> python

>>> import platformtools

>>> platformtools.get_self_slot()

【结果】

[-1,0]

2.6  get_slot_info

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

【命令】

get_slot_info(global-slot-number)

【参数】

global-slot-number:全局slot编号。

【返回值】

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

【举例】

# 使用API获取指定slot的信息。

<Sysname> python

>>> import platformtools

>>> platformtools.get_slot_info(1)

【结果】

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

2.7  get_slot_range

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

【命令】

get_slot_range()

【返回值】

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

【举例】

# 使用API获取系统slot编号范围。

<Sysname> python

>>> import platformtools

>>> platformtools.get_slot_range()

【结果】

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

2.8  get_standby_slot

get_standby_slot接口用来获取所有备用主控板所在的槽位号。‌

【命令】

get_standby_slot()

【返回值】

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

【举例】

# 使用API获取备用主控板所在的槽位号。‌‌

<Sysname> python

>>> import platformtools

>>> platformtools.get_standby_slot()

【结果】

[[-1, 1], [-1, 2]]

2.9  Transfer

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

【命令】

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对象

【使用指导】

当远程服务器使用IPv6地址时,该地址必须置于方括号[ ]内。例如:

Transfer("ftp","[2200::22]","0729.cfg","flash:/0729.cfg",user="abc",password="123456")

【举例】

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

<Sysname> python

>>> import platformtools

>>> platformtools.Transfer('tftp', '192.168.1.26', 'test.cfg', 'flash:/test.cfg', user='', password='')

【结果】

<platformtools.Transfer object at 0xb7f700e0>

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们