• 產品與解決方案
  • 行業解決方案
  • 服務
  • 支持
  • 合作夥伴
  • 關於我們

01-基礎配置指導

目錄

15-Python配置

本章節下載 15-Python配置  (241.17 KB)

15-Python配置


1 Python

Python是一種簡單易學,功能強大的編程語言,它有高效率的高層數據結構,簡單而有效地實現了麵向對象編程。Python簡潔的語法和對動態輸入的支持,再加上解釋性語言的本質,使得它在大多數平台上的許多領域都是一個理想的腳本語言,特別適用於快速的應用程序開發。

Comware V7係統內嵌了Python解釋器,可以直接在設備上使用Python2.7版本的命令和標準API。為了方便用戶進行係統配置,Comware對Python進行了擴展,用戶可以使用這些擴展功能。關於Comware的Python擴展,可以參考“2 附錄:Comware Python API”。

1.1  通過Python配置設備

Comware V7係統內嵌了Python解釋器。用戶可以進入Python shell,使用Python的命令、標準API和擴展API;還可以直接在設備上執行Python腳本,以方便自動化配置係統。

1.1.1  進入Python shell

表1-1 進入Python shell

操作

命令

說明

進入Python shell

python

該命令在用戶視圖下執行

 

1.1.2  執行Python腳本文件

表1-2 執行Python腳本文件

操作

命令

說明

執行Python腳本文件

python filename

該命令在用戶視圖下執行

 

1.1.3  退出Python shell

表1-3 退出Python shell

操作

命令

說明

退出Python shell

exit()

該命令在Python shell下執行

 

1.2  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

 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 附錄:Comware Python API

本文描述在Comware V7中提供的擴展Python API,擴展Python API必須遵循標準Python語言語法。在使用擴展Python API時,必須先導入Platformtools包,導入方法有兩種:

·     方法一:用import platformtools引入整個Platformtools包,在執行具體API的時候用platformtools.API。例如,下麵的舉例表示:使用API Transfer將TFTP服務器(192.168.1.26)上的文件test.cfg下載到設備上。

<Sysname> 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='')

<platformtools.Transfer object at 0xb7eab0e0>

·     方法二:用from platformtools import API引入單個API。例如,下麵的舉例表示:使用API Transfer將TFTP服務器(192.168.1.26)上的文件test.cfg下載到設備上。

<Sysname> python

Python 2.7.3 (default)

[GCC 4.4.1] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> from platformtools import Transfer

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

<platformtools.Transfer object at 0xb7e5e0e0>

2.1  channel

用來執行Comware係統的命令並創建channel對象。

【命令】

channel(command=‘’)

【參數】

command:表示要下發的命令,缺省為空。channel下發命令是從用戶視圖開始,如果command中不指定視圖,直接輸入命令,表示該命令在用戶視圖下執行;當需要執行其它視圖的命令時,需要先輸入進視圖的命令,再輸入具體的配置命令。多條命令之間以空格加分號分隔,如’system-view ;display interface brief | include UP’。

【返回值】

命令執行的輸出信息,為列表對象。

【使用指導】

channel僅支持Comware命令,不支持Linux、Python、Tcl命令。

channel一般用於自動化測試。

channel返回的列表對象中可能含有十六進製隱藏字符,例如0x08。如果要避免顯示隱藏字符,可以使用API CLI;或者通過Python的for語句循環輸出channel的執行結果,例如:

<Sysname> python

>>> import platformtools

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

>>> for value in c:

...  print value

...

display vlan

 Total VLANs: 13

 The VLANs include:

 1(default), 2-3, 10, 20, 30, 40, 100-101, 200-202, 300

<Sysname>

【舉例】

# 使用API channel顯示VLAN信息。

<Sysname> python

>>> import platformtools

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

【結果】

['display vlan', ' Total VLANs: 13', ' The VLANs include:', ' 1(default), 2-3, 10, 2

0, 30, 40, 100-101, 200-202, 300, \x08\x08 ', '<Sysname>'] 

2.2  CLI

2.2.1  CLI

用來執行Comware V7係統的命令並創建CLI對象。

【命令】

CLI(command=‘’, do_print=True)

【參數】

command:表示要下發的命令,缺省為空。多條命令之間以空格加分號分隔,如’system-view ;local-user test class manage’。

do_print:表示是否輸出執行結果,True表示輸出執行結果,False表示不輸出執行結果。缺省值為True。

【返回值】

CLI對象

【使用指導】

需要注意下發命令是從用戶視圖開始,如果需要在其它視圖下下發命令,需要首先進入該視圖。

如果command中不指定視圖,直接輸入命令,表示該命令在用戶視圖下執行;當需要執行其它視圖的命令時,需要先輸入進視圖的命令,再輸入具體的配置命令。

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

【舉例】

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

<Sysname> 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')

【結果】

<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.2.2  get_output

用來獲取命令執行的輸出信息。

【命令】

CLI.get_output()

【返回值】

命令執行的輸出信息

【舉例】

# 使用API CLI添加本地用戶,並輸出命令行執行結果。

<Sysname> 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()

【結果】

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

2.3  Transfer

2.3.1  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對象

【舉例】

# 使用API Transfer將TFTP服務器(192.168.1.26)上的文件test.cfg下載到設備上。

<Sysname> 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='')

【結果】

<platformtools.Transfer object at 0xb7f700e0>

2.3.2  get_error

用來獲取下載文件過程中的錯誤信息。

【命令】

Transfer.get_error()

【返回值】

下載文件過程中的錯誤信息,若沒有錯誤信息則返回None。

【舉例】

# 使用API Transfer將TFTP服務器(1.1.1.1)上的文件test.cfg下載到設備上。

<Sysname> 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”

2.4  API get_self_slot

2.4.1  get_self_slot

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獲取主用主控板/全局主用主控板所在的槽位號。

<Sysname> 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]

2.5  API get_standby_slot

2.5.1  get_standby_slot

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獲取主用主控板/全局主用主控板的槽位號。

<Sysname> 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()

【結果】

[]

2.6  API get_slot_range

2.6.1  get_slot_range

get_slot_range接口用來獲取當前係統所支持的成員編號範圍。

【命令】

get_slot_range()

【返回值】

返回一個字典對象,返回值始終為{'MaxSlot': max-slot-number, 'MinSlot': min-slot-number }max-slot-number表示設備支持的最大成員編號,min-slot-number表示設備支持的最小成員編號。

【舉例】

# 使用API獲取係統成員編號範圍。

<Sysname> 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': 327, 'MinSlot': 0}

2.7  API get_slot_info

2.7.1  get_slot_info

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獲取單板信息。

<Sysname> 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}

2.8  send

用來生成並發送日誌信息。

【命令】

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。

<Sysname> terminal monitor

<Sysname> 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.

2.9  SYSLOG

用來創建SYSLOG對象。

【命令】

SYSLOG(module=‘’)

【參數】

module:表示產生日誌的模塊名,為1~8個字符的字符串,不區分大小寫。

【返回值】

【使用指導】

創建的SYSLOG對象用於發送指定模塊的日誌。

【舉例】

# 為SNMP模塊創建SYSLOG對象,並賦值給變量a。

<Sysname> 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

【結果】

<platformtools.SYSLOG object at 0xb7e180e0>

不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!

BOB登陆
官網
聯係我們