Jeżeli w Twoim domowym labie ląduje serwer Cisco UCS, to być może nie chcesz by działał 24/7. Prąd jest drogi, szumi to niemiłosiernie i jak nie masz serwerowni w garażu to po paru dniach będziesz miał dość odgłosów serwerowni w swoim domu. Z drugiej strony leń siedzi w każdym z nas i nikomu nie chce się chodzić by tylko kliknąć przycisk by uruchomić serwer. Zatem najbardziej przydatny skrypt to ten, który pozwoli uruchomić serwer zdalnie.
Wtorki z Pythonem
Odkryj biblioteki Python przydatne w automatyzacji
Dzisiaj chciałbym podzielić się z Wami wyjątkowym repozytorium, które zawiera zbiór biblioteki Python przydatne w automatyzacji. Wykorzystasz je w skryptach automatyzujących zarządzanie sieciami komputerowymi. Repozytorium dostępne jest na GitHub Szkoły DevNet dla wszystkich. Jest to projekt, który może zainteresować zarówno początkujących, jak i doświadczonych programistów sieciowych. A co w nim znajdziesz? Szczegóły poniżej.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Nowości w Python 3.11
Co prawda Python 3.11 wyszedł w październiku zeszłego roku to dopiero niedawno miałem czas przyjrzeć się nowościom i zmianom w tej wersji języka. Nie ma ich co prawda bardzo dużo, ale niektóre wydają się dość ciekawe i do zastosowania nie tylko przez zaawansowanych programistów. Sam jako domyślny język używam od wielu miesięcy wersji 3.10, którą uważam za stabilną. Spójrzmy zatem co przynosi wersja 3.11.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
AdminDays – skrypt z warsztatów
W zeszłym tygodniu, 25 marca, w ramach eventu AdminDays miałem przyjemność poprowadzić warsztaty/prezentację związaną z automatyzacją w środowisku sieciowym. W czasie spotkania pokazałem proces tworzenia skryptu w języku Python, który wykonuje proste czynności administracyjne związane z odczytaniem i rekonfiguracją interfejsu Loopback. Z samym urządzeniem połączenie następuje za pomocą protokołu RESTCONF, a jeżeli ten jest niedostępny to za pomocą SSH z wykorzystaniem biblioteki Netmiko. Skrypt, wraz z zestawem linków do podstawowych bibliotek, które każdy programista sieciowy powinien znać, znajduje się w repozytorium GitHub Szkoły DevNet.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Tajemnicze *args i **kwargs
Jak w każdym języku programowania także w Pythonie znajdziemy ciekawe i zastanawiające konstrukcje składni. Na przykład dziwnie wyglądające *args
i **kwargs
w języku Python. Dziś pokażę Ci w jaki sposób poradzić sobie w sytuacji, gdy wywołujemy funkcję, ale nie wiemy ile argumentów do niej zostanie przekazanych. Z taką sytuacją w świecie automatyzacji infrastruktury mamy do czynienia dość często. Rozwiązanie w tym przypadku jest banalnie proste.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Operatory porównania “==” oraz “is”
Wiele osób zaczynających swoją przygodę z Pythonem jest zafascynowana elastycznością tego języka oraz składnią, która jest dość intuicyjna. Następnie zderzają się z problemem, że za bardzo chcieliby upraszczać, a co za tym idzie nie do końca poprawnie stosują różne operatory. Chyba najczęściej mylnie używane są operatory porównania ==
oraz is
.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Numery telefonów
Gdy programujemy skrypty związaną z contact center, czy innymi aplikacjami z rodziny telefonii IP, bardzo szybko spotkamy się zadaniami, w których musimy przetworzyć numery telefonów. Z produktów związanych z telefonią numer uzyskujemy zazwyczaj w formacie E.164. Dane zapisane w różnego rodzaju bazach danych czy plikach tekstowych, które nasze skrypty będą przetwarzać, prawie na pewno nie będą zawsze zgodne z tym międzynarodowym standardem. Z takim problemem miałem do czynienia niedawno, gdy w projekcie dla mojego klienta pisałem dodatkowe skrypty do Amazon Connect, czyli call center w chmurze Amazona. W operowaniu różnego rodzaju formatami numerów telefonicznych pomogła mi biblioteka phonenumbers.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Podkreślenia w nazwach zmiennych i funkcji
Na pewno nie umknęło Twojej uwadze, że w języku Python nazwy niektórych obiektów, zmiennych czy funkcji składają się z podkreśleń umieszczanych na początku, na końcu lub po obu stronach. Jest to celowy zabieg, konwencja i standard, który ma na celu uporządkowanie kodu zarówno pod względem semantycznym, funkcjonalnym jak i optycznym, czyli ułatwić jego czytanie. W dzisiejszym artykule wyjaśnię Ci jakie znaczenie mają podkreślenia w tych konkretnych przypadkach.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Która wersja Pythona jest najlepsza?
Ostatnio opisywałem kilka nowości, które weszły do języka Python wraz z wersją 3.9. Następstwem tego wpisu były pytania o to, która wersja Pythona jest najlepsza. Której wersji języka zalecam używać. Czy najnowsza jest najlepsza? A może stosować, którąś ze starszych? Odpowiedź na te i inne pytania znajdziecie w dzisiejszym artykule.
Przez Piotr Wojciechowski, temu
Wtorki z Pythonem
Łączenie zmiennych słownikowych
W krótkim artykule opisującym nowości w języku Python w wydaniu 3.9 zwróciłem uwagę na dwa operatory pozwalające na operowanie na zmiennych typu słownikowego (dict
). W dzisiejszym wpisie w ramach Wtorków z Pythonem pokażę Ci kilka sposobów na łączenie dwóch lub więcej zmiennych słownikowych ze sobą. Pisząc swoje programy do automatyzacji bardzo często będziesz te operacje wykonywać.
Metoda update()
W dzisiejszym artykule posługiwać będę się trzema zmiennymi słownikowymi. Zdefiniuje je w poniższy sposób. Zauważmy, że zarówno w zmiennej x jaki i z występuje klucz ‘a’, lecz ma przypisane inne wartości.
>>> x = {'a': 1, 'b': 2} >>> y = {'c': 3, 'd': 4} >>> z = {'a': 5, 'f': 6}
Pierwsza metoda łączenia ze sobą dwóch zmiennych typu słownikowego polega na wykorzystaniu metody update()
. Gdy wywołamy ją jako metodę zmiennej x jako argument podając zmienną y, to zawartość zmiennej y zostanie doklejona do zmiennej x.
>>> x.update(y) >>> x {'a': 1, 'b': 2, 'c': 3, 'd': 4}
W przypadku, gdy nazwy kluczy się powtarzają, wartość klucza w zmiennej, dla której metoda jest uaktualniana zostanie zaktualizowana
>>> x.update(z) >>> x {'a': 5, 'b': 2, 'f': 6}
Dlatego ważne jest by dokładnie rozumieć kierunek działania metody update()
. Wywołanie jej ze zmiennej z przyniosłoby następujący efekt.
>>> z.update(x) >>> z {'a': 1, 'f': 6, 'b': 2}
Łączenie zmiennych operatorami **
Bliźniaczo podobna do powyższej jest metoda operatorów **
. Wymaga ona jednak zapisania wyniku operacji w trzeciej zmiennej. Nie modyfikuje ona żadnej ze zmiennych, które łączymy jak to miało miejsce w poprzednim przykładzie. Została ona wprowadzona w wydaniu 3.5 języka Python. Nie jest ona zbyt intuicyjna w swoim zapisie i niewielu programistów z niej korzystało.
>>> u = { **x, **y} >>> u {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> w = { **x, **z} >>> w {'a': 5, 'b': 2, 'f': 6}
Jak widać w przypadku powtarzających się kluczy nadpisana zostanie wartość tego z lewej strony. Zaletą tej metody jest jednak to, że w pojedynczym zapisie możemy połączyć ze sobą wiele zmiennych słownikowych. Operacje łączenia wykonują się od lewej do prawej.
>>> t = { **x, **y, **z} >>> t {'a': 5, 'b': 2, 'c': 3, 'd': 4, 'f': 6}
Połączyć dwie zmienne słownikowe możemy jeszcze tworząc trzecią zmienną jawną deklaracją typu, czyli dict(x, **y)
. Metoda ta działa jednak jedynie w przypadku, gdy wszystkie klucze w słownikach są tekstem.
Operatory w Python 3.9
W Python 3.9 wprowadzono operacje na zmiennych słownikowych za pomocą operatorów union (|
) oraz in-place union (|=
). Pierwszy z nich jest odpowiednikiem zapisu {**x, **y}
.
>>> x | y {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> x | z {'a': 5, 'b': 2, 'f': 6} >>> x | y | z {'a': 5, 'b': 2, 'c': 3, 'd': 4, 'f': 6}
Sam operator |
nie modyfikuje wartości żadnej ze zmiennych. Wynik operacji możemy przypisać do nowej zmiennej. Inaczej zachowuje się operator |=
, który połączoną wartość zapisuje w zmiennej po lewej stronie wywołania. Jest on zatem odpowiednikiem wywołania metody update()
.
>>> x |= y >>> x {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> y {'c': 3, 'd': 4}
Jak widzisz łączenie zmiennych słownikowych można wykonać na wiele sposobów. Wybierz odpowiedni dla swojego programu. Koniecznie pamiętaj, która metoda nadpisuje wartość jednej z łączonych zmiennych aby nie stracić przetwarzanych danych.
Przez Piotr Wojciechowski, temu