예제로보는 네트워크엔지니어를위한 Python 101
오늘의목표 NO
NO
YES
Python Basic Indentation Python에서 Indentation으로 Code Block(Scope) 를구분 동일한 Code Block은동일한방법 (Space, Tab) 으로구분해야함 하위레벨의 Code Block 나오기전에는 : ( 콜론 ) 사용 Indent Example i = 10 While( i < 10): print( i= + i) i=i+1 Indent Example i = 10 While( i < 10): print( i= + i) i=i+1 IndentationError: unident does not match any outer indentation level
Python Basic 변수 변수명으로문자 / 숫자 / _ 가사용가능하며대소문자구분 변수선언시, 별도의변수 Type이존재하지않음 변수의할당되는값에따라서변수 Type이지정됨 객체단위로지정이되며, 별도의초기화없이바로사용이가능 동일객체인지 id( 변수명 ) 명령을사용하여확인이가능하다. ( 일종의메모리참조값 )
Python Basic 수치형자료 숫자를나타내는자료형 Int, long, float, complex 등이존재
Python Basic 문자열 문자열은,, 로묶으며, 다수의문자열은 ( 홑따음표 ) 3개를묶는다. 문자열내부에는다른변수값을포함하여출력할수있으며, 이경우에는변수가포함될위치에 %s를붙인다. 이후 print 명령시에 % 를쓰고 %s에들어갈변수명을입력한다. 이를 Placeholder이라고한다. Placeholder에서만약 2개이상의변수를포함하고자할때에는 % 뒤에변수명기입시, ( ) 로묶어준다. Placeholder Example name = zigi blog = zigispace.net mystr = %s Blog : %s print(mystr %(name,blog))
Python Basic List 다수의객체를하나의객체로관리하는데이터타입 [ ] ( 대괄호 ) 로묶어주며, 대괄호내에서는, 로각객체를구분한다. [ ] 안의항목들은각각의 index position을가지며, index는 0부터시작. (zero base) index를사용하여각객체에접근가능하며, : 을사용하며, index 범위지정도가능. List에항목을추가할경우에는 append, insert, extend 메서드사용가능 List 내의항목을삭제하려고할경우에는 del List_Var[index] 으로가능 List Example blog = [ zigi, space ] blog.append(.net ) blog.insert(0, http:// )
Python Basic Tuple 다수의객체를하나의객체로관리하는데이터타입 ( ) ( 괄호 ) 로묶어주며, 대괄호내에서는, 로각객체를구분한다. List는생성이후, 수정이가능하만 Tuple은수정불가. ( 읽기전용 ) 읽기전용이기때문에 List에비해서처리속도가빠르다 tuple Example myt = (1,2,3) First, second = 10, 20 Blog = ( zigi, space )
Python Basic Dictionary / Map 다수의객체를하나의객체로관리하는데이터타입이라는것은 List와동일하지만, Dictionary에저장된값은 key 와 value 를 Mapping 하여관리된다 { } ( 중괄호 ) 로묶어주며, 중괄호내에서는, 로각객체를구분한다. 하나의 Key 과 Value는 : 로구분한다. Dictionary에있는값을 key 를이용해서접근이가능하다. Dictionary Example dns = { kt : 168.126.63.1, lg : 164.124.107.9, sk : 210.220.163.82 } dns[ kt ] >>> for op in dict.keys():... print dict[op] + ' : ' + op
Python Basic If ( 조건문 ) 조건문에따라서구문실행, 조건에만족하지않을경우에실행하기위해서는 else 사용. 구문을맞추기위해서는반드시 indent를지켜야함 다수의조건을위해서는 elif 명령을사용. if 조건식 : 명령문 명령문 If Example if ( grade = A ): print Very Good elif ( grade = B ): print Good Else: print Get out! if 조건식 : 명령문 elif 조건식 : 명령문 else: 명령문
Python Basic while ( 반복문 ) 조건식이 True 인동안반복문수행 While 조건식 : 반복구문 while Example count = 10 while count >= 0: print count count = count -1
Python Basic For ( 반복문 ) Sequence형혹은 Iteration이가능한객체에대해서순차적으로반복문수행 Sequence : List, Tuple, Dictionary, String Iterator : 내장함수 iter() 사용등 For object in Sequence 형 : 반복구문 for Example mylist = ['Ko','Jae','Sung'] for op in mylist: print op
Python Basic Range 일정한수열을반복하도록만든메서드 return 값은 Iterator 값을반환 range( 시작값, 종료값 {, 증가값 ) range Example evennumber = range(0,10,2) for op in evennumber: print op
Python Basic Break, Continue ( 제어문 ) Break : 반복문도중에반복문이 Code block을탈출 ( 반복문종료 ) Continue : 반복문의시작시점으로이동 Break Example evennumber = range(0,10,2) for op in evennumber: if op == 6: break print op Continue Example evennumber = range(0,10,2) for op in evennumber: if op == 6: continue print op
Python Basic Function, Method 여러줄의명령을하나의범위로지정하여특정한역할을하도록만든것 프로그램에서여러번사용해야하는일을함수로만들어필요시호출해서사용. 함수를선언시에는 def 라는 Keyword를사용. 매개변수는함수내에서사용하게될변수를함수호출시, 전달하고자할때사용. Def 함수명 ( 매개변수1, 매개변수2, ): 명령문명령문 return value Function Example Def SumFunc(a,b): sum = a+b return sum print(sumfunc(10,20))
네트워크장비를위한라이브러리 TextFSM https://github.com/google/textfsm
네트워크장비를위한라이브러리 Netmiko https://github.com/ktbyers/netmiko
네트워크장비를위한라이브러리 Paramiko http://www.paramiko.org
네트워크장비를위한라이브러리 pyntc https://github.com/networktocode/pyntc
네트워크장비를위한라이브러리 napalm NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor https://napalm-automation.net/
네트워크장비를위한라이브러리 ncclient https://napalm-automation.net/
네트워크장비를위한라이브러리 라이브러리별지원가능한장비 ( 표로구성 ) https://napalm.readthedocs.io/en/latest/support/index.ht ml
네트워크벤더라이브러리 F5 SDK https://github.com/f5networks/f5-common-python
네트워크벤더라이브러리 PyNOS https://github.com/brcdcomm/pynos
네트워크벤더라이브러리 Extreme https://github.com/extremenetworks/extremescripting
네트워크벤더라이브러리 pyeapi https://github.com/aristanetworks/eossdk
네트워크벤더라이브러리 nitro https://github.com/citrix/netscaler-nitro-api
네트워크벤더라이브러리 Cobra / NXAPI https://github.com/citrix/netscaler-nitro-api
네트워크벤더라이브러리 fortiosapi https://github.com/fortinet-solutions-cse/fortiosapi
네트워크벤더라이브러리 CheckPoint https://github.com/citrix/netscaler-nitro-api
네트워크벤더라이브러리 PyEZ https://github.com/citrix/netscaler-nitro-api
NAPLAM Pyntc Netmiko IOS O O O IOS-XR O O IOS-XE O NXOS O O O JunOS O O O EOS O O O Brocade VDX O Huawei O Mellanox O Ruckus ICX O A10 O Aruba O Extreme EXOS O F5LTM O Fortinet O
OpenSource Guide Document https://github.com/ktbyers/netmiko/blob/develop/docs/source/index.rst http://netmiko.readthedocs.io/en/stable/index.html
따라해보기 : netmiko
따라해보기 : 설치해보기
따라해보기 : 설치해보기
따라해보기 : 설치해보기
따라해보기 : 설치해보기 pip install paramiko
따라해보기 : 설치해보기 pip install scp pip install pyyaml pyserial textfsm
따라해보기 : 설치해보기 git clone https://github.com/ktbyers/netmiko.git
따라해보기 : 설치해보기
따라해보기 : 설치해보기 python setup.py install
따라해보기 : 테스트코드 장비 Inventory 장비접속 명령어전송 결과값
Python 문자열다루기 Python 문자열다루기 CLI 명령을기반으로한네트워크장비제어에서는문자열을다루는것이중요 일반적인 CLI 결과중, 의미있는값혹은필요한값을어떻게 가공 하느냐? 벤더에서제공되는 API만으로는원하는값을모두만들기가어렵기때문에아직까지는반드시필요한부분.
Python 문자열다루기 Python 문자열연산 두개이상의문자열은 + 기호를사용하여연결 순수문자열의연결은문자열간의공백만으로도가능 Python 문자열슬라이싱 문자열 [ 시작Idx: 종료Idx-1] - 문자열을시작 Index 지점부터, 종료 Index 1까지의문자열을잘라낸다. - 시작 Index와종료 Index를각각생략하게되면, 각각최초시작지점 / 종료지점을가리키게된다.
Python 문자열다루기 Python 문자열 Formmating print 시에 %s, %c, %d 등으로지정하여원하는데이터값을출력할수있다. - %s 문자열 / %c 문자한개 / %d 정수 / %f 부동소수 / %o 8진수 / %x 16진수 각 Formatting 코드에맞춰서값을넣어야하지만, %s로지정할경우에는자동변환이되서들어가게된다. 문자열내에 % 를사용하여 Formatting 시에는 % 를일반문자로출력하려면 %% 로써야출력되지만, 문자열내에 % 를사용한 Formatting이없으면그냥 % 만쓴다. % 숫자s 과같이 % 와 Formatting 코드사이에숫자를넣으면해당크기만큼공간을할당해서출력하게된다. 이때에숫자를 로입력하면해당공간만큼할당하여문자열을왼쪽정열하여출력하게된다.
Python 문자열다루기 format 메서드 (String.format()) 문자열내의삽입될변수값을선언 예 ) blog: {0} community: {1} event : {2}.format( zigispace.net, neteg, 24 th N.EX.T )
Python 문자열다루기 Python 문자열 Method find(keyword, [start, [end]]) / rfind(keyword, [start, [end]]) - 문자열에서 Keyword가위치한첫번째 (rfind는뒤에서부터첫번째 ) Index를 리턴하고, 해당 Keyword 가존재하지않으면 -1 을리턴 index(keyword, [start, [end]]) - find() 와동일한동작을하지만, Keyword가존재하지않을경우에 -1 이아닌 ValueError 예외를발생. join(sequence) - sequence 형변수를, Join을호출한문자열로연결해서리턴하는메서드이며, split() 와반대의역할을하게됨. 문자를제거.
Python 문자열다루기 Python 문자열 Method partition(separator) - 문자열을 separator을나누게되는데, separator 앞, separator, separator 뒤의 3개의 Tuple로리턴. lstrip([chars]) - 문자열의왼쪽을제거.chars을지정하지않으면공백문자를제거. split([separator, [maxsplit]]) - separator로문자열을분리하는것은 Partition과동일하나, Partition의경우에는 separator도함께리턴되지만, split는해당 separator 기준으로분리가되면서포함되지않는다. Maxsplit의값을주게되면, 개수의 max 값을지정할수있다
Python 문자열다루기 Python 문자열 Method Strip([chars]) - 문자열양쪽끝을잘라내는데, 별도의 chars를지정하지않으면공백을제거하고 chars 지정시에는해당문자가포함된모든내용이삭제된다