Mësoni Python Control Flow dhe Loops për të shkruar skriptet Linux
Në artikullin e mëparshëm të kësaj serie Python, ne ndamë një hyrje të shkurtër për Python, guaskën e saj të linjës së komandës dhe IDLE.
Ne demonstruam gjithashtu se si të kryhen llogaritjet aritmetike, si të ruhen vlerat në variabla dhe si t'i printojmë ato vlera në ekran. Së fundi, ne shpjeguam konceptet e metodave dhe vetive në kontekstin e Programimit të Orientuar në Objekte përmes një shembulli praktik.
Në këtë udhëzues, ne do të diskutojmë rrjedhën e kontrollit (për të zgjedhur drejtime të ndryshme veprimi në varësi të informacionit të futur nga një përdorues, rezultatit të një llogaritjeje ose vlerës aktuale të një ndryshoreje) dhe sythe (për të automatizuar detyrat e përsëritura) dhe më pas të aplikojmë çfarë kemi mësuar deri më tani për të shkruar një skript të thjeshtë shell që do të shfaqë llojin e sistemit operativ, emrin e hostit, lëshimin e kernelit, versionin dhe emrin e harduerit të makinës.
Ky shembull, edhe pse bazë, do të na ndihmojë të ilustrojmë se si mund të shfrytëzojmë aftësitë e Python OOP për të shkruar skriptet e guaskës më lehtë sesa përdorimi i mjeteve të zakonshme bash.
Me fjalë të tjera, ne duam të largohemi nga
# uname -snrvm
te
ose
Duket bukur, apo jo? Le të përveshmë mëngët dhe ta realizojmë atë.
Mësoni Control Flow në Python
Siç thamë më herët, rrjedha e kontrollit na lejon të zgjedhim rezultate të ndryshme në varësi të një gjendjeje të caktuar. Zbatimi i tij më i thjeshtë në Python është një klauzolë if/else.
Sintaksa bazë është:
if condition:
# action 1
else:
# action 2
- Kur kushti vlerësohet si i vërtetë, blloku i kodit më poshtë do të ekzekutohet (i përfaqësuar nga
# veprim 1
. Përndryshe, kodi nën other do të ekzekutohet. - Një kusht mund të jetë çdo deklaratë që mund të vlerësohet si e vërtetë ose e gabuar.
Për shembull:
1 < 3 # true
firstName == "Gabriel" # true for me, false for anyone not named Gabriel
- Në shembullin e parë, krahasuam dy vlera për të përcaktuar nëse njëra është më e madhe se tjetra.
- Në shembullin e dytë ne krahasuam firstName (një variabël) për të përcaktuar nëse, në pikën aktuale të ekzekutimit, vlera e tij është identike me \Gabriel”
- Kushti dhe deklarata else duhet të pasohen nga një dy pika (:)
- Indentacioni është i rëndësishëm në Python. Linjat me dhëmbëzim identik konsiderohen të jenë në të njëjtin bllok kodi.
Ju lutemi vini re se deklarata if/else është vetëm një nga shumë mjetet e rrjedhës së kontrollit të disponueshme në Python. Ne e rishikuam atë këtu pasi do ta përdorim në skenarin tonë më vonë. Mund të mësoni më shumë rreth pjesës tjetër të mjeteve në dokumentet zyrtare.
Mësoni Loops në Python
E thënë thjesht, një loop është një sekuencë udhëzimesh ose deklaratash që ekzekutohen sipas radhës për sa kohë që një kusht është i vërtetë, ose një herë për artikull në një listë.
Cikli më i thjeshtë në Python përfaqësohet nga cikli for që përsëritet mbi artikujt e një liste të caktuar ose një varg që fillon me artikullin e parë dhe mbaron me të fundit.
Sintaksa bazë:
for x in example:
# do this
Këtu shembulli mund të jetë ose një listë ose një varg. Nëse e para, ndryshorja me emrin x përfaqëson çdo artikull në listë; nëse kjo e fundit, x përfaqëson çdo karakter në vargun:
>>> rockBands = []
>>> rockBands.append("Roxette")
>>> rockBands.append("Guns N' Roses")
>>> rockBands.append("U2")
>>> for x in rockBands:
print(x)
or
>>> firstName = "Gabriel"
>>> for x in firstName:
print(x)
Prodhimi i shembujve të mësipërm tregohet në imazhin e mëposhtëm:
Modulet Python
Për arsye të dukshme, duhet të ketë një mënyrë për të ruajtur një sekuencë të udhëzimeve dhe deklaratave të Python në një skedar që mund të thirret kur është e nevojshme.
Kjo është pikërisht ajo që është një modul. Veçanërisht, moduli os ofron një ndërfaqe me sistemin operativ themelor dhe na lejon të kryejmë shumë nga operacionet që zakonisht bëjmë në një linjë komande.
Si i tillë, ai përfshin disa metoda dhe veti që mund të quhen siç shpjeguam në artikullin e mëparshëm. Sidoqoftë, ne duhet ta importojmë (ose ta përfshijmë) atë në mjedisin tonë duke përdorur fjalën kyçe të importit:
>>> import os
Le të printojmë direktorinë aktuale të punës:
>>> os.getcwd()
Tani le t'i bashkojmë të gjitha këto (së bashku me konceptet e diskutuara në artikullin e mëparshëm) për të shkruar skenarin e dëshiruar.
Script Python
Konsiderohet praktikë e mirë fillimi i një skripti me një deklaratë që tregon qëllimin e skenarit, kushtet e licencës sipas të cilave ai lëshohet dhe një histori rishikimi që liston ndryshimet që janë bërë. Edhe pse kjo është më shumë një preferencë personale, ajo shton një prekje profesionale në punën tonë.
Këtu është skenari që prodhon rezultatin që kemi treguar në krye të këtij artikulli. Është komentuar shumë në mënyrë që të kuptoni se çfarë po ndodh.
Merrni disa minuta për ta kaluar atë përpara se të vazhdoni. Vini re se si përdorim një strukturë if/else për të përcaktuar nëse gjatësia e çdo titulli të fushës është më e madhe se vlera e vetë fushës.
Bazuar në rezultatin, ne përdorim karaktere boshe për të mbushur hapësirën midis titullit të fushës dhe titullit tjetër. Gjithashtu, ne përdorim numrin e duhur të vizave si ndarës midis titullit të fushës dhe vlerës së tij më poshtë.
#!/usr/bin/python3
# Change the above line to #!/usr/bin/python if you don't have Python 3 installed
# Script name: uname.py
# Purpose: Illustrate Python's OOP capabilities to write shell scripts more easily
# License: GPL v3 (http://www.gnu.org/licenses/gpl.html)
# Copyright (C) 2016 Gabriel Alejandro Cánepa
# Facebook / Skype / G+ / Twitter / Github: gacanepa
# Email: gacanepa (at) gmail (dot) com
# This program is free software: you can redistribute it and/or modify
# it is under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# REVISION HISTORY
# DATE VERSION AUTHOR CHANGE DESCRIPTION
# ---------- ------- --------------
# 2016-05-28 1.0 Gabriel Cánepa Initial version
# Import the os module
import os
# Assign the output of os.uname() to the the systemInfo variable
# os.uname() returns a 5-string tuple (sysname, nodename, release, version, machine)
# Documentation: https://docs.python.org/3.2/library/os.html#module-os
systemInfo = os.uname()
# This is a fixed array with the desired captions in the script output
headers = ["Operating system","Hostname","Release","Version","Machine"]
# Initial value of the index variable. It is used to define the
# index of both systemInfo and headers in each step of the iteration.
index = 0
# Initial value of the caption variable.
caption = ""
# Initial value of the values variable
values = ""
# Initial value of the separators variable
separators = ""
# Start of the loop
for item in systemInfo:
if len(item) < len(headers[index]):
# A string containing dashes to the length of item[index] or headers[index]
# To repeat a character(s), enclose it within quotes followed
# by the star sign (*) and the desired number of times.
separators = separators + "-" * len(headers[index]) + " "
caption = caption + headers[index] + " "
values = values + systemInfo[index] + " " * (len(headers[index]) - len(item)) + " "
else:
separators = separators + "-" * len(item) + " "
caption = caption + headers[index] + " " * (len(item) - len(headers[index]) + 1)
values = values + item + " "
# Increment the value of index by 1
index = index + 1
# End of the loop
# Print the variable named caption converted to uppercase
print(caption.upper())
# Print separators
print(separators)
# Print values (items in systemInfo)
print(values)
# INSTRUCTIONS:
# 1) Save the script as uname.py (or another name of your choosing) and give it execute permissions:
# chmod +x uname.py
# 2) Execute it:
# ./uname.py
Pasi të keni ruajtur skriptin e mësipërm në një skedar, jepini lejet e ekzekutimit dhe ekzekutoni atë siç tregohet në fund të kodit:
# chmod +x uname.py
# ./uname.py
Nëse merrni gabimin e mëposhtëm gjatë përpjekjes për të ekzekutuar skriptin:
-bash: ./uname.py: /usr/bin/python3: bad interpreter: No such file or directory
Do të thotë që nuk e keni të instaluar Python 3. Nëse është kështu, mund të instaloni paketën ose të zëvendësoni linjën e interpretit (kushtojini vëmendje të veçantë dhe jini shumë të kujdesshëm nëse keni ndjekur hapat për të përditësuar lidhjet simbolike në Binarët Python siç përshkruhen në artikullin e mëparshëm):
#!/usr/bin/python3
me
#!/usr/bin/python
gjë që do të bëjë që versioni i instaluar i Python 2 të ekzekutojë skriptin në vend të kësaj.
Shënim: Ky skenar është testuar me sukses si në Python 2.x dhe 3.x.
Edhe pse disi rudimentar, ju mund ta mendoni këtë skript si një modul Python. Kjo do të thotë që mund ta hapni në IDLE (Skedari → Hape… → Zgjidh skedarin):
Do të hapet një dritare e re me përmbajtjen e skedarit. Më pas shkoni te moduli Run → Run (ose thjesht shtypni F5). Prodhimi i skriptit do të shfaqet në guaskën origjinale:
Nëse dëshironi të merrni të njëjtat rezultate me një skript të shkruar thjesht në Bash, do t'ju duhet të përdorni një kombinim të sed dhe të përdorni metoda komplekse për të ruajtur dhe rimarrë artikujt në një listë (për të mos përmendur përdorimi i tr për shndërrimin e shkronjave të vogla në të mëdha).
Përveç kësaj, Python siguron transportueshmëri në atë që të gjitha sistemet Linux dërgohen me të paktën një version Python (ose 2.x ose 3.x, ndonjëherë të dyja). Nëse duhet të mbështeteni në një guaskë për të arritur të njëjtin qëllim, do t'ju duhet të shkruani versione të ndryshme të skenarit bazuar në guaskën.
Kjo tregon se veçoritë e Programimit të Orientuar në Objekt mund të bëhen aleatë të fortë të administratorëve të sistemit.
Shënim: Ju mund ta gjeni këtë skript python (dhe të tjerë) në një nga magazinat e mia të GitHub.
Përmbledhje
Në këtë artikull, ne kemi shqyrtuar konceptet e rrjedhës së kontrollit, sythe/përsëritjes dhe modulet në Python. Ne kemi treguar se si të shfrytëzojmë metodat dhe vetitë OOP në Python për të thjeshtuar skriptet e tjera komplekse të guaskës.
A keni ndonjë ide tjetër që dëshironi të provoni? Shkoni përpara dhe shkruani skriptet tuaja të Python dhe na tregoni nëse keni ndonjë pyetje. Mos hezitoni të na dërgoni një linjë duke përdorur formularin e komenteve më poshtë dhe ne do t'ju kontaktojmë sa më shpejt që të mundemi.