Wybierz region
pl
  • PL
  • EN
Wydrukuj

Kiedy Python ułatwi Ci życie – praktyczne przykłady dla początkujących

Z artykułu poznasz praktyczne przykłady zastosowania Pythona oraz poznasz różnice wersji 2.7.x a 3.5.x .

Język Python ma szerokie zastosowanie. Jest elastyczny i w odróżnieniu od innych języków programowania jego składnia nie zawiera znaku „;”. Dzięki swojej prostocie jest doskonałym narzędziem do automatyzacji codziennych (często nudnych) zadań. Niektóre biblioteki Python takie jak nose2 czy PyTest mogą być przydatnym narzędziem dla testerów czy administratorów. Powyższe narzędzia dają możliwość pisania prostych testów jednostkowych w Pythonie, które uruchamiane są z Jenkinsa. Wyniki testów zwracane są w formacie pliku .xml co sprawia, że raportowanie błędów przestaje być męczące. Administratorzy również znajdą coś dla siebie, jak wiadomo utrzymanie środowisk testowych jest jednym z ważnym elementów życia oprogramowania. W tym celu można użyć specjalnie przeznaczonych bibliotek Python do stworzenia Healthchecker’a, który w czasie rzeczywistym raportuje dane na temat systemu.              

INSTALACJA

Instalacja obsługi języka Python jest prosta zarówno w systemach Windows jak i Unix, poniżej instrukcja instalacji na obu wersjach systemu:

  • Windows 10:

Odwiedź stronę:

https://www.python.org/downloads/

Po wyborze odpowiedniej wersji należy wybrać wersję systemu Windows oraz odpowiednią dystrybucję. Po pobraniu zalecana jest instalacja w katalogach domyślnych.

 

  • Ubuntu 16.04:

W terminalu uruchom komendę:

user@ubuntu:~$ sudo apt-get install python

następnie zweryfikuj czy instalacja przebiegła poprawnie poprzez:

 user@ubuntu:~$ python –version

Jeśli komenda zwróci numer wersji, oznacza to, że instalacja się udała.

 

Warto korzystać z nowej wersji języka Python 3.5.x, ponieważ z końcem roku 2019 przestaje być wspierana wersja 2.7.x

Po instalacji pakietu języka Python możliwe będzie uruchamianie plików .py jako plików wykonywalnych w systemach Windows. W systemach z rodziny Unix uruchomienie pliku o rozszerzeniu .py odbywa się w poniższy sposób:

 user@ubuntu:~$ python foo.py

 Poniżej kilka praktycznych przykładów wykorzystania języka Python w pracy codziennej:

  • Kopiowanie plików z serwera z określonych lokalizacji:

import pysftp #import biblioteki

file = raw_input("NAZWA PLIKU")

sftp = pysftp.Connection('nazwa_hosta', username='nazwa_uzytkownika', password='haslo') #definicja połączenia z serwerem

command ='scp nazwa_uzytkownika@adres_zdalnego_serwera:%s' %file + ' /sciezka/do/katalogu/lokalnego' # komenda do wykonania po stronie serwera

sftp.execute(command) #wykonanie komendy

W prosty sposób kilkoma linijkami kodu jesteśmy w stanie zautomatyzować kopiowanie plików z serwera.

 

  • Jeśli chcesz z kolei skopiować pliki na serwer zdalny należy nieco zmodyfikować zmienną command:

import pysftp #import biblioteki

file = raw_input("NAZWA PLIKU")

sftp = pysftp.Connection('nazwa_hosta', username='nazwa_uzytkownika', password='haslo') #definicja połączenia z serwerem

command ='scp %s' %file + ' nazwa_uzytkownika@adres_zdalnego_serwera:/sciezka/do/zapisu/na/serwerze' # komenda do wykonania po stronie serwera

sftp.execute(command) #wykonanie komendy

  • Pobieranie danych z bazy Oracle:

Import Cx_oracle

dsn_tns = cx_Oracle.makedsn('adres_hosta', 'port', service_name='tns')
conn = cx_Oracle.connect(user='user', password='password', dsn=dsn_tns)
cur = conn.cursor()

#Teraz przy uzyciu kursora cur mozemy wykonywac operacje na bazie danych w ponizszy sposob

select = "SELECT * FROM nazwa_tabeli"
execute_command = cur.execute(select)
print execute_command

 

Powyższy skrypt zwróci użytkownikowi zawartość tabeli nazwa_tabeli. Oczywiście wykonywane operacje nie kończą się na samych SELECT’ach do bazy danych. W zależności od potrzeb należy modyfikować zmienną action.

 

  • Poniżej przykład dodania rekordu do tabeli nazwa_tabeli:

 

import Cx_Oracle

dsn_tns = cx_Oracle.makedsn(‘host’, ‘port’, service_name='tns_name')
conn = cx_Oracle.connect(user=’user’, password=’password’, dsn=dsn_tns)
cur = conn.cursor()

action = „INSERT INTO nazwa_tabeli(kolumny, po, przecinku) VALUES(odpowiednio, zmapowane, wartości)”
execute_command = cur.execute(select)
print execute_command

 

  • Jako ostatni nieco bardziej rozbudowany skrypt wykorzystujący konektor mysql.connector:

 

import mysql.connector
import pysftp

user = raw_input("Nazwa_uzytkownika\n")
pwd = raw_input("Haslo\n")
host = raw_input("nazwa_hosta\n")
db = raw_input("nazwa_bazy\n")
some_value = "x"

def connect():

conn = mysql.connector.connect(user=user, password=pwd, host=host, database=db)
cur = conn.cursor()
global cur

def actions():
db_query = "SELECT version FROM versions WHERE some_column =%s" %some_value
version = cur.execute(db_query)
global version

file = "file_name_%s" %version
"""
Zmienna file zawiera teraz pelna nazwe pliku file_name_[version] wraz z numerem wersji
Ponizej string jaki zawiera zmienna path zalkadajac, ze zmienna verion zawiera numer
wersji 2.0:

file_name_2.0
"""

def exists_remote():
sftp = pysftp.Connection('hostname', username="user", password="password")
command = "find / -type f -name %s" %file + " -print"
execute_command = sftp.execute(command)
print execute_command

 

connect()
actions()
exists_remote()

 

Powyższy skrypt łączy się z bazą danych w oparciu o wprowadzone dane (zmienne user, pwd, host, db) i pobiera numer wersji z tabeli versions. Oczywiście nazwy w zapytaniu są fikcyjne, należy je zastąpić odpowiednimi nazwami kolumn i tabeli. Zmienna some_value przyjmuje wartość warunku, jaki chcemy wykorzystać przy wykonaniu SELECTA/INSERTA etc.

W funkcji exists_remote() należy odpowiednio zmodyfikować zmienne: hostname, username, password.

 

Wykonanie skryptu powinno zwrócić informację o tym, czy plik file znajduje się na serwerze.

 

Jak widać w kodzie ostatniego przykładu zachowanie skryptu definiowane jest poprzez wcięcia. Wszystkie zaprezentowane przykłady napisane są w wersji języka Python 2.7.15, z końcem roku 2019 wersja 2.7.x przestanie być wspierana. Poniżej przykłady różnic między wersjami 2.7.x a 3.5.x:

 

  1. Funkcja print:

2.7.x: print "Hello World"
3.5.x: print("Hello World")

  1. Domyślny typ stringa:

2.7.x – ASCII

3.5.x – Unicode

  1. range()/xrange():

2.7.x – funkcja xrange()

3.5.x – funkcja xrange() nie istnieje, zamiast niej wykorzystywana jest funkcja range() zwracająca dane w formacie listy.

              Są to podstawowe różnice między wersjami języka 2.7.x a 3.5.x. Różnice są znikome więc warto od początku zgłębiać tajniki wersji 3.5.x.

Przedstawione skrypty są oczywiście najprostszymi z możliwych rozwiązań, obrazują one prostotę języka Python i przykłady jego wykorzystania w codziennej pracy. Poza opisanymi wyżej przykładami Python daje możliwości programowania sieciowego, tworzenia GUI (biblioteka Tkinter) etc. Tak więc zastosowań jest bardzo wiele.


Dawid Wełnicki

Specjalista ds. technologii – zajmuję się administacją infrastruktury rozwojowej w środowiskach Windows i Linux oraz współpracuję przy rozwoju podejścia DevOps, prywatnie interesuję się bezpieczeństwem IT. W wolnych chwilach lubię pograć w tytuły takie jak: Call Of Duty Warzone, PUBG czy GTA V :)


Zobacz wszystkie artykuły tego autora


Wydrukuj