Programowanie w językach skryptowych Wykład 1: Wprowadzenie do języków skryptowych 1
Plan wykładu Wykłady są po 2 godziny tygodniowo przez pierwszą połowę semestru. Wykład1 Przypomnienie z Pythona, Przykładowe skrypty systemowe w Python. Wykład 2 OOP Wykład 3 Wątki Wykład 4 Wstęp o Ruby, typy danych, instrukcje sterujące, pętle Wykład 5 stringi, OOP, Refleksje Wykład 6 wyrażenia regularne, wyjątki, wątki Wykład 7 Kolokwium 2
Typy języków skryptowych Języki kontroli zadań i powłoki (ang. job control languages and shells) Najstarsze języki skryptowe: Unix shelll, MS DOS COMMAND.COM Języki specyficzne dla aplikacji Tworzone dla jednej aplikacji. Emacs Lisp, VisualBasic for application Języki przetwarzania tekstu Narzędzia Unixa: AWK, sed, grep, pierwsze wersje Perl Dynamiczne języki ogólnego przeznaczenia dynamiczne typy, zarządzanie pamięcią, używane do budowy dowolnych programów Języki GUI Operują na graficznych elementach systemu operacyjnego, symulują działanie użytkownika.
Język skryptowy Język skryptowy język programowania służący do kontrolowania danej aplikacji lub służący do pisania kodu, który jest analizowany przez interpretator Skrypty programy napisane w językach skryptowych, których kod źródłowy, lub kod pośredni są analizowane przez interpretator lub program główny i uruchamiane. Programy nieskryptowe są najpierw kompilowane to kodu maszynowego i później wykonywane niezależnie od innych aplikacji. Wczesne języki skryptowe były zwykle zwane językami plików wsadowych (ang. batch languages) tworzono w celu skrócenia tradycyjnego procesu edytowanie kompilacja linkowanie wykonanie.
Przykłady języków skryptowych Python; ASP; AutoIt; AviSynth; Awk; bash; Brain; C Script; CobolScript; Dylan; E; Euphoria; Guile; Game Maker Language; ICI;JavaScript;JCL;Lua;MUMPS;ObjectRexx;Perl;PHP;Pike; Pliant; AngelCode; QuakeC; REBOL; Rexx; Ruby; Groovy; sh; Simkin; Tcl; UnrealScript; VBScript; Visual DialogScript; Miva.
Czym jest Python Python to popularny (gdyż prosty, o dużych możliwościach, darmowy i powszechnie dostępny) język skryptowy, opracowany we wczesnych latach 90. przez Guido van Rossuma Język nie wymusza jednego stylu programowania, pozwalając na stosowanie różnych. W Pythonie możliwe jest programowanie obiektowe, programowanie strukturalne i programowanie funkcyjne. Typy sprawdzane są dynamicznie, a do zarządzania pamięcią stosuje się garbage collection. Zastosowanie Pythona NASA aplikacje do zarządzania kontrolą startową wahadłowców. Projekt Nebula to rozproszone środowisko obliczeniowe przystosowane do wykonywania obliczeń w "chmurze" łączące wiele modułów i aplikacji Pythonowych. 6
Darmowość i swobodny dostęp Powszechnie dostępny: www.python.org Oprogramowanie o otwartych źródłach Licencja Pythona zezwala na kopiowanie, modyfikację, rozszerzanie, rozpowszechnianie, wbudowywanie i odsprzedaż bez konieczności wnoszenia opłat lub podpisywania umów licencyjnych. Ograniczenia: Należy umieścić informacje oprawach autorskich.
Pewność działania i dobre wspomaganie Powstał 20 lat temu stąd obecnie jest to dojrzały produkt, którego kod źródłowy był tworzony, modyfikowany, testowany i poprawiany przez wiele osób. Python jest rozpowszechniany wraz z kompletem dokumentacji, samouczek, opis języka oraz opis bibliotek
Przenośność Python został napisany w ANSI C. Można go skompilować iuruchamiać na każdej popularnej współczesnejplatformiesystemowej. Rdzeń języka oraz biblioteki działają w ten sam sposób na wszystkich platformach, stądprogramymożna tworzyć wmieszanychśrodowiskach. Ograniczenia: niektóre rozszerzenia Pythona są zależne od systemu operacyjnego. Nie można zatem wywoływać modułu COM z Windows w systemie Linux.
Zgodność z innymi językami Python pozwala się łatwo sklejać z istniejącymi bibliotekami napisanymi w C, C++, Fortran, Java lub Visual Basic (za pomocą pakietu COM) O integracji Pythona z C można przeczytać w podręcznikach Python/C API refence Manual i Extending and embeding the Python Interpreter dołączonych do dystrybucji Pythona Jython implementacja Pythona dla JVM. Jython umożliwia wykorzystanie składni Pythona w programach java. Pozwala to na bezproblemową integrację z wykorzystaniem bibliotek Java i innych aplikacji opartych na Java. Projekt Jython dąży dotego,abywszystkiemoduły Pythona można byłouruchamiać na JVM IronPython implementacja Pythona dla platformy.net Framework. IronPython posiada również wsparcie we flagowym środowisku programistycznym firmy Microsoft,czyliVisual Studio
Przejrzystość kodu KodPythonamożna łato odczytać dziękinastępującym cechom: Struktura wierszowa wymuszająca jednolite stosowanie wcięć do wydzielania bloków kodu. Jest to cecha unikatowa wśród powszechnie stosowanych języków programowania Składnia i semantyka ułatwiająca stosowanie go zarówno w prostychskryptachjak i w dużych programach Elastyczne struktury danych i dynamiczne typy umożliwiające zaprogramowanie wielu czynności w kilku wierszach.
Obiektowość Klasy Obiekty Dziedziczenie Przeciążanie Wyjątki Refleksja
Gdzie działa Python YouTube popularny serwis z klipami wideo jest w większości napisany w Pythonie. Twórcy serwisu podkreślali wydajność jaką oferuje Python, a także szybkie implementowanie nowych funkcjonalności poprzez czytelny kod, który łatwo rozszerzać i aktualizować. Google używa Pythona w wielu swoich aplikacjach i usługach takich jak Google App Engine, czy Google Wave. Zatrudnia nawet twórcę tego języka Guido van Rossuma. Aplikacje napisane w Pythonie działają pod wieloma systemami takimi jak Windows, Linux/Unix, Mac OS X, OS/2, Amiga, czy smarphony Palma i Nokia. Dostępne są także implementacje Pythona w Javie (Jython) i.net (IronPython) działające wszędzie tam, gdzie dostępne są te platformy. 13
Typy projektów Tworzenie dynamicznych stron internetowych Frameworki Django, Pylons, serwer aplikacji Zope/Plone. Efektywne i szybkie tworzeniu nowoczesnych stron internetowych bogatych w funkcjonalności. Język ma wiele zalet w porównaniu do PHP Platforma Google App Engine dla rozproszonego hostingu aplikacji internetowych. Oparta została o Pythona i oferuje serwisom www taką samą skalowalność, jaką posiadają wszystkie aplikacje i usługi tej firmy. GAE jest darmowe. Usługi i serwisy społecznościowe to obecnie podstawa dla wielu serwisów www. Za pomocą Pythona można wykorzystać API/usługi serwisów takich jak Twitter, Blip.pl, Facebook, aplikacji Google (Maps, Docs i innych przez GData), czy Google Wave. Przykładowo biblioteka PyFacebook pozwala tworzyć aplikacje dla tego serwisu, a API Google Wave umożliwia tworzenie aplikacji dla tej platformy, czy integrowanie własnych stron i aplikacji z Wave 14
Typy projektów Programowanie sieciowe różne usługi, biblioteki, aplikacje, serwery i klienty wykorzystujące sieci. Moduły: socket, select, HTTPServer, SimpleHTTPRequestHandler Aplikacje desktopowe (MS Windows, OS X, Linux) można pisać w Pythonie za pomocą bibliotek takich jak PyQt4, PyGTK, wxpython, czy wbudowanej biblioteki tk. Za pomocą aplikacji py2exe można stworzyć gotowe aplikacje (exe) dla systemów MS Windows, a za pomocą py2app gotowe aplikacje dla OS X. 15
Typy projektów Zastosowania naukowe, finansowe, przetwarzanie danych. Generowanie wykresów, zestawień, plików PDF, arkuszy Excela, czy ODT/ODS. Reportlab generujeplikipdfiformatujeraporty Matplotlib generowanie wykresów. Scipy oferuje implementacje różnych algorytmów do metod numerycznych. PIL biblioteka przetwarzania i analizy obrazów xlwt i xlrt zapis i odczyt arkuszy Excela. Gry i aplikacje wykorzystujące 3D też można stworzyć z wykorzystaniem Pythona. Bazy danych możliwość zarządzania bazami danych różnych typów. Instalacje http://www.python.org/getit/ Python 2.7.1 i Python 3.2. Wersje 32 bitowe i 64 bitowe na Windows oraz na inne systemy: Linux, MacOS 16
Dystrybucja Pythona interpreter, standardowe moduły, pliki pomocnicze wymagane do uruchomienia programów. Python działa na większości systemów operacyjnych w tym: Windows, Linux, MacOS
Dokumentacja Pythona Python Tutorial wprowadzenie do programowania w Pythonie napisane przez Guido van Rossuma zawiera dużo przykładów. Python library Reference opisuje standardową bibliotekę Pythona dołączoną do pakietu dystrybucyjnego, a także wbudowane typy danych, funkcje i metody. Python language Refence zawieradokładny opis składni i znaczenia elementów języka.
Python 2 i Python 3 Python 3 = Python 3000 lub Py3K Wyrażenie print zastąpiono przez funkcję print() Metody dict.keys(), dict.items() i dict.values() zwracają widoki zamiast list map() i filter() zwracają iteratory Użycie typów text i binarnego zamiast stringów unikodowych i 8 bitowych Niezgodność wielu przydatnych bibliotek 19
Zastosowanie IDLE Zintegrowane środowisko programowania) jest aplikacją, która opakowuje interpreter Pythona w interfejs graficzny (GUI) i dołącza wiele funkcji do podstawowego interpretera wiersza poleceń. Charakteryzuje się ona obecnością menu, automatycznym dodawaniem wcięć, wskazówkami na temat składni, debuggerem oraz narzędziami do edycji plików. IDLE jest dostępna w wersjach przeznaczonych dla systemów Windows i Unix (dla systemu MacOS istnieje podobne narzędzie o nazwie Python IDE). Pełna dokumentacja IDLE jest dostępna pod adresem: www.python.org/idle/doczidle2.html Aplikacja IDLE jest dołączana do dystrybucji Pythona.
Przetwarzanie stringów Podmiana fragmentu napis.replace('ala', 'Ola').replace('.', ' i psa.') Zmiana na tytuł (lower, upper, swapcase) napis.title() # 'Ala Ma Kota.' Konkatencja stringów 'Ala' "Ma" ""Kota"" # 'AlaMaKota' Konwersja na string str(cokolwiek) Operator konkatencji 'Ala ma ' + str(2) + koty. # 'Ala ma 2 koty' Operator powielania 'la'*7 # 'lalalalalalala' 21
Przetwarzanie stringów Podawanie kolejnych parametrów: "Podajemy {0} paramet{1}".format('kolejne', 'ry') Parametry nazwane "Nazwa {param}".format(param='parametru.') Pojedynczy znak (liczymy od 0) napis[4] Zakres (liczymy od 0) napis[4:6] Pojedynczy znak od końca napis[ 5] Zakres licząc od końca napis[ 5: 1] napis[ 5:] UWAGA! String jest obiektem niemutowalnym. Przy modyfikacji stringu zwracana jest kopia obiektu. Oryginalna zmienna nie ulega modyfikacji! 22
Praca z listą Tworzenie pustej listy lista = [] Modyfikacja list lista = ['a', 'b', 'c'] Dodawanie nowych elementów lista.append('d') Rozszerzanie listy o listę nowych elementów lista.extend(['e', 'f', 'g']) Dodanie elementu na zdefiniowanej pozycji lista.insert(0, '0') 23
Praca z listą Usunięcie pierwszego wystąpienia elementu lista.remove('0') Usunięcie elementu z pozycji lista.pop (3) Usunięcie elementu z pozycji lista.del (3) Odwrócenie kolejności lista.reverse() Sortowanie listy lista.sort() Pobranie indeksu zadanego elementu lista.index('d') Liczba elementów listy lista.count() Liczba konkretnych elementów listy lista.count('c') 24
Szybkie przetwarzanie list W Pythonie w większości przypadków nie ma konieczności używania pętli w czasie przetwarzania list Szybkie tworzenie listy Lista = [0] * 20 Lista2 = [3,5,2] * 6 Lista3 = range(1,21,2) Filozofia Pythona: Jak możesz nie używaj pętli 25
Listy składane (List comprehensions) Postać prosta [wyrażenie for zmienna in sekwencja] Lista3 = [1,2,3, 5, 11] Lista4 = [2*x for xinlista3] Lista_krotek = [(x, x*x) for x in range(1,5)] Kody_ASCII = [(x, ord(x)) for x in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"] Postać prosta warunkowa [wyrażenie for zmienna in sekwencja if warunek] Lista5 = [x for x in Lista3 if x>10] Podzielne = [x for x in range(1,20) if not (x%3) or not (x%5)] Samogloski = [(x, ord(x)) for x in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" if x in "AEIOUY"] 26
Listy składane (List comprehensions) Postać rozszerzona [wyrażenie for zmienna1 in sekwencja1 for zmienna2 in sekwencja2... ] Iloczyn kartezjański sekwencji Pary = [(x,y) for x in range(1,5) for y in range(4,0, 1)] Roznice = [x y for x in range(1,5) for y in range(4,0, 1)] Sklejka = [str(x)+y+str(z) for x in [1,2] for y in ['A','B'] for z in [0,3] ] Postać rozszerzona z jednym warunkiem [wyr for zm1 in sekwencja1 for zm2 in sekwencja2... if warunek ] Pary każdy element z każdym, tylko jeżeli pierwszy element jest mniejszy od drugiego: [(x,y) for x in range(1,5) for y in range (6,3, 1) if x<y] Postać rozszerzona z wieloma warunkami [wyrażenie for zmienna1 in sekwencja1 if warunek1 for zmienna2 in sekwencja2 if warunek2... ] 27
Zagnieżdżone listy składane >>> matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] Poniższa lista składana dokonuje transpozycji macierzy: >>> [[row[i] for row in matrix] for i in (4)] [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 28
Wykonywanie funkcji na listach Wyrażenie lambda służy do definiowania anonimowych funkcji w postaci wyrażenia: lambda argument : wyrażenie a = lambda : 'a' print a() # wywołanie funkcji lambda o nazwie a b = lambda x,y : x+y print b(1,2) # wywołanie funkcji lambda o nazwie b apply wywołanie funkcji z parametrami uzyskanymi z rozpakowania sekwencji dziel=lambda x,y,z: (x+y)/z #zamiast pisać dziel(3,5,2) xyz=(3,5,2) apply(dziel,xyz) 29
Wykonywanie funkcji na listach Funkcja map() wykonuje podaną funkcję dla każdego elementu listy, krotki lub słownika. Często łączy się z funkcją anonimową. Wynikiem operacji jest lista map(lambda x: x*x, range(5)) map(dziel, range(5), range(5), [2]*5) Funkcja zip() służy do konsolidacji danych. Przyjmuje jako swoje parametry jedną lub więcej sekwencji, po czym zwraca listę krotek, których poszczególne elementy pochodzą z poszczególnych sekwencji. Krotki = zip("abcdef",[1,2,3,4,5,6]) gdy długości sekwencji są różne, wynikowa sekwencja jest skracana do najkrótszej 30
Wykonywanie funkcji na listach Funkcja filter() filtruje elementy sekwencji przy użyciu podanej funkcji, która musi zwracać wartość Prawdę lub Fałsz S="Ala ma kota i konto na chomiku." Samogloski=filter(lambda x:x in 'aeiouy', S) Pozostale = filter(lambda x:x not in in 'aeiouy', S) Funkcja reduce() pobiera dane z sekwencji i zwraca na ich podstawie pojedynczą wartość np. sumę liczb. Funkcja ta wykonuje podaną jako pierwszy argument funkcję dla pierwszych dwóch elementów sekwencji, a następnie wykonuje tą funkcję dla wyniku i trzeciego elementu i tak do wyczerpania elementów sekwencji. #suma elementów: reduce(lambda x,y: x+y, [1,2,3]) #iloczyn elementów: reduce(lambda x,y: x*y, [1,2,3,4]) #suma kwadratów elementów: reduce(lambda x,y: x+y, map(lambda x: x*x, range(1,10))) 31
Praca ze słownikiem Tworzenie pustego słownika dict={} Inicjalizacja nowego słownika dict={'a': 'A', 'b': 'B', 'c': 'C'} Aktualizacja słownika dict.update({'d':'d'}) Wyświetlenie listy kluczy (iterkeys) dict.keys() Wyświetlenie listy wartości (itervalues) dict.values() Wyświelenie listy elementów (iteritems) dict.items() Usunięcie wartości o zadanym kluczu dict.pop('d') Usunięcie pierwszego elementu dict.popitem() Wyczyszczenie słownika dict.clear() 32
Praca z krotkami Krotka (ang. tuple) jest niezmienną listą. Zawartość krotki określamy tylko podczas jej tworzenia. Potem nie możemy już jej zmienić. Tworzenie nowej krotki t = ("a", "b", "ala", "z", "element") Przeszukiwanie krotki t.index("z") "z" in t Wybór elementów krotki t[0] t[ 1] t[1:3] Krotki można konwertować na listy. Wbudowana funkcja tuple, której argumentem jest lista, zwraca krotkę z takimi samymi elementami, natomiast funkcja list, której argumentem jest krotka, zwraca listę. W rezultacie tuple zamraża listę, a list odmraża krotkę. 33
Generatory Generatory są w Pythonie mechanizmem leniwej ewaluacji funkcji, która w przeciwnym razie musiałaby zwracać obciążającą pamięć lub kosztowną w obliczaniu listę. def generuj_calkowite(n): for i in xrange(n): yield i Można teraz użyć tego generatora: for i in generuj_calkowite(n): print i Przed wykonaniem drugiego fragmentu kodu należy oczywiście zdefiniować zmienną N. Definicja generatora przypomina definicję funkcji, ale zamiast słowa kluczowego return używa się yield. Generator jest obiektem przechowującym stan, mogącym wielokrotnie wchodzić do i opuszczać ten sam dynamiczny zakres. Wywołanie generatora może być użyte zamiast listy lub innej struktury, po której elementach będziemy iterować. Za każdym razem, gdy pętla for w powyższym przykładzie potrzebuje następnego elementu, wywoływany jest generator, który daje następny element.
Praca ze zbiorami Zbiory to nieuporządkowane zestawy obiektów. Używamy ich, gdy istotny jest tylko fakt występowania elementu, a nie jego położenie albo liczba powtórzeń. Zbiory można testować pod kątem występowania danego elementu, sprawdzać czy to jest podzbiór innego zbioru, szukać części wspólnej zbiorów. Tworzenie zbioru A = set() kraje = set(['brazylia', 'Rosja', 'Indie']) Modyfikacja zbioru kraje2 = kraje.copy() kraje2.add('chiny' ) lub szybciej kraje2 = kraje set(['chiny']) kraje.remove('rosja') 35
Praca ze zbiorami Czy element występuje w zbiorze? >>> 'Indie' in kraje True >>> 'USA' in kraje False Zawieranie się zbiorów kraje2.issuperset(kraje) kraje2 > kraje kraje.issubset(kraje2) kraje < kraje2 Część wspólna zbiorów kraje.intersection(kraje2) kraje & kraje2 36
Przykładowe skrypty systemowe Funkcja wypisuje na konsoli nazwę katalogu oraz jego zawartość. import os def get_directory_info(dir): os.chdir(dir) current_dir = os.getcwd() dir_contents = os.listdir(dir) print "" print "Bieżący katalog = ", current_dir print "Zawartość katalogu = ", dir_contents print"" get_directory_info('c:\\python25') Oto przykład wyniku wywołania tej funkcji: Bieżący katalog = C:\python25 Zawartość katalogu = ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'pywin32 wininst.log', 'README.txt', 'Removepywin32.exe', 'Scripts', 'tcl', 'Tools', 'w9xpopen.exe'] 37
Funkcja os.urandom(25) os.urandom() służy do generowania losowych ciągów bajtów o długości przekazanej jako parametr jej wywołania. W systemach Linux funkcja ta odczytuje dane z urządzenia /dev/urandom, w Windowsie wykorzystuje mechanizm CryptGenRandom. Jest to przydatna funkcja w zadaniach kryptograficznych oraz przy generowaniu unikalnych sygnatur wykorzystywanych w uwierzytelnianiu komunikacji między programami. import os x = os.urandom(25) y = x z = os.urandom(25) print "Does x = y? ", x==y print "Does x == z? ", x==z print "x = ", x Oto przykładowy wynik wywołania programu: Czy x == y? True Czy x == z? False x = öij?? RV?iW Tő Ô,öâ?ŚŇĐ 38
Moduł time Moduł time oferuje funkcje służące do manipulowania i formatowania danych związanych z czasem. Moduł jest dostępny dla wszystkich systemów operacyjnych, ale nie wszystkie funkcje są dostępne dla każdego systemu operacyjnego. Implementacja niektórych funkcji jest specyficzna dla systemu operacyjnego, zatem przed użyciem modułuwartozapoznać się z jego dokumentacją. Czas w module time jest reprezentowany za pomocą listy dziewięciu liczb całkowitych. Funkcje gmtime(), localtime() oraz strptime() zwracają wyniki z możliwością dostępu do poszczególnych z tych wartości za pośrednictwem atrybutów. 0 tm_year rok czterocyfrowo, np. 2001 1 tm_mon zakres od 1 do 12 2 tm_mday zakres od 1 do 31 3 tm_hour zakres od 0 do 23 4 tm_min zakres od 0 do 59 5 tm_sec zakres od 0 do 61 6 tm_wday zakres od 0 do 6, poniedziałek to 0 7 tm_yday zakres od 1 do 366 8 tm_isdst 0, 1, 1 39
Przykład time() time() zwraca liczbę zmiennoprzecinkową reprezentującą w sekundach czas, jaki upłynął od 1 stycznia 1970 roku (tradycyjny punkt odniesienia czasu w systemach Unix). import time raw_input("naciśnij [Enter]: ") time1 = time.time() raw_input("zaczekaj kilka sekund i naciśnij [Enter] ponownie: ") time2 = time.time() difference = int(time2 - time1) print "Pomiędzy naciśnięciami minęło ", difference, "sekund" Wynik wywołania tego skryptu będzie miał następującą postać: Naciśnij [Enter]: Zaczekaj kilka sekund i naciśnij [Enter] ponownie: Pomiędzy naciśnięciami minęło 5 sekund 40
Przykład formatowania czasu Czas może być wyświetlony jako krotka lub jako ciąg znaków sformatowany na wiele sposobów. Dodatkowo obsługiwane są strefy czasowe (jak czas lokalny czy Greenwich Mean Time [GMT]): import time print "Czas GMT jako krotka: ", time.gmtime() print "Czas GMT jako ciąg znaków: ", time.asctime(time.gmtime()) print "Czas lokalny jako krotka: ", time.localtime() print "Czas lokalny jako ciąg znaków: ", time.asctime(time.localtime()) print "Czas lokalny sformatowany jako <miesiąc dzień, rok>: ", \ time.strftime("%b %d, %Y") Wynik wywołania tego skryptu ma następującą postać: Czas GMT jako krotka: (2009, 2, 5, 22, 31, 15, 3, 36, 0) Czas GMT jako ciąg znaków: Thu Feb 05 22:31:15 2009 Czas lokalny jako krotka: (2009, 2, 5, 23, 31, 15, 3, 36, 0) Czas lokalny jako ciąg znaków: Thu Feb 05 23:31:15 2009 Czas lokalny sformatowany jako <miesiąc dzień, rok>: February 05, 2009 41
Obsługa parametrów wywołania programu Moduł optparse oferuje wygodne mechanizmy obsługi opcji wywołania z wiersza poleceń. Automatycznie obsługiwany jest też tekst pomocy w przypadku zastosowania opcji h lub help. from optparse import OptionParser parser = OptionParser() parser.add_option("-n", "--name", dest="name", help="wyświetlenie nazwiska") (options, args) = parser.parse_args() print "Nazywasz się ", options.name Przykład wywołania programu wraz z jego wynikiem: C:\Python> python optparse-example1.py --name Adam Nowak" Nazywasz się Adam Nowak Jeśliprogramzostaniewywołany zopcją h, zostanie wyświetlony automatyczniewygenerowanytekst pomocy (w języku angielskim): C:\Python> python optparse-example1.py h Usage: optparse-example1.py [options] Options: -h, --help show this help message and exit -n NAME, --name=name wyświetlenie nazwiska 42
Moduł platform Funkcje modułu platform pozwalają uzyskać informacje zarówno na temat platformy sprzętowej, jak i programowej. Program może przeanalizować uzyskane w ten sposób informacje i dostosować odpowiednio swoje działanie. import platform if platform.platform().find("windows")!= -1: print "Bieżący system to Windows" # w tym miejscu umieść kod specyficzny dla Windowsa elif platform.platform().find("linux")!= -1: print "Bieżący system to Linux" # w tym miejscu umieść kod specyficzny dla Linuksa Jeśli skrypt wywołamy w systemie Windows, zobaczymy następujący wynik: Bieżący system to Windows W przypadku Linuksa zobaczymy następujący wynik: Bieżący system to Linux 43
Moduł getpass Moduł getpass udostępnia funkcje obsługujące odczyt haseł od użytkownika, pozwalając skryptom uwierzytelniać użytkowników na podstawie poprawności podanego hasła. Inną użyteczną funkcją modułu jest zwracanie nazwy systemowej zalogowanego użytkownika. import getpass password = getpass.getpass() if password == "letmein": print("nazwa zalogowanego użytkownika " + getpass.getuser()) 44
Moduł winreg dostęp do Rejestru Windows Poniższy przykład wyszukuje w rejestrze określony klucz i wyświetla wartości wszystkich jego podkluczy: import _winreg explorer = _winreg.openkey(_winreg.hkey_current_user, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer") # lista wartości zapisanych w danym kluczu rejestru i = 0 try: while 1: name, value, type = _winreg.enumvalue(explorer, i) print repr(name) i += 1 except: print Oto przykładowy wynik działania tego programu: C:\Python> python winreg-example1.py 'WebFindBandHook' 'FileFindBandHook' 'Logon User Name' 'ShellState' 'CleanShutdown' 'Browse For Folder Width' 'Browse For Folder Height' 'FaultCount' 'FaultTime' 'IconUnderline' 'EnableAutoTray' 'link' 45