目次
1. Mis on käsu käivitamine Pythonis?
Python on programmeerimiskeel, mida kasutatakse mitmesuguste ülesannete automatiseerimiseks. Selle üks peamisi eeliseid on võimalus käivitada käsurea käske otse programmist. Pythonis saab OS-i funktsioone kasutada failihalduse ja süsteemiadministreerimise automatiseerimiseks. Käesolevas artiklis tutvustame nii põhimeetodeid kui ka täiustatud tehnikaid käsu käivitamiseks Pythoniga.2. Põhilised viisid käsu käivitamiseks Pythonis
Kõige lihtsam viis käsu käivitamiseks Pythonis on kasutadaos.system()
või subprocess
moodulit. Mõlemal meetodil on omad eelised ja puudused, mistõttu on oluline valida sobiv lahendus vastavalt olukorrale.2.1 Käsu käivitamine os.system()
abil
os.system()
on lihtne viis süsteemikäsu käivitamiseks Pythonist. Seda saab kasutada järgmiselt:import os
os.system('ls')
Seda meetodit on lihtne kasutada, kuid see ei võimalda käsu väljundit püüda ning turvalisuse seisukohalt on piiranguid. Seetõttu ei soovitata seda meetodit enamasti kasutada. Tänapäeval kasutatakse sagedamini subprocess
moodulit, mis pakub paremat kontrolli.2.2 Põhiline käsu käivitamine subprocess.run()
abil
subprocess.run()
on soovitatav meetod käsu käivitamiseks Pythonis. See võimaldab käsu väljundit püüda, vigu hallata ning käske turvaliselt ja paindlikult käivitada.import subprocess
subprocess.run(['ls', '-l'])
See kood käivitab käsu ls -l
ja kuvab tulemuse standardväljundis. subprocess.run()
töötab sünkroonselt ja ootab käsu lõppemist enne järgmise protsessi alustamist. See on eriti kasulik failihalduse ja süsteemihalduse ülesannete jaoks.
3. Täiustatud käsu käivitamine: asünkroonne töötlemine ja torujuhtmed
Kui on vaja keerukamat käsu käivitamist, saabsubprocess
mooduli abil kasutada asünkroonset töötlemist ja torujuhtmeid. See võimaldab tõhusalt automatiseerida keerulisemaid töövooge.3.1 Asünkroonne käsu käivitamine subprocess.Popen()
abil
Asünkroonne töötlemine võimaldab programmi jätkamist ilma käsu lõppemist ootamata, mis on kasulik mitme ülesande samaaegseks täitmiseks. Näiteks:import subprocess
proc = subprocess.Popen(['sleep', '5'])
print("Käsk on käivitamisel")
See kood käivitab käsu sleep 5
asünkroonselt ja kuvab sõnumi “Käsk on käivitamisel”. Asünkroonne töötlemine on kasulik ajamahukate käskude puhul või kui on vaja paralleeltöötlust.3.2 Mitme käsu ühendamine torujuhtmega
Mitme käsu ühendamiseks on torujuhtmed väga kasulikud. Näiteks faili sisu lugemiseks ja teise faili kirjutamiseks võib kasutada järgmist koodi:import subprocess
with open('input.txt') as input_file, open('output.txt', 'w') as output_file:
subprocess.run(['cat'], stdin=input_file, stdout=output_file)
See kood loeb input.txt
faili sisu käsu cat
abil ja kirjutab selle output.txt
faili. subprocess.run()
üks tugevusi on standardse sisendi ja väljundi ühendamine torujuhtmega.4. Veahaldus ja väljundi püüdmine
Oluline osa käsu käivitamisel on vigade käsitlemine ja väljundi püüdmine.subprocess
on loodud nende nõuete paindlikuks haldamiseks.4.1 Standardväljundi ja veaväljundi püüdmine
subprocess.run()
võimaldab käsu standardväljundi ja veaväljundi püüdmist. Näiteks:import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
Kui määrata capture_output=True
, püüab Python käsu standardväljundi. Veaväljundit saab lugeda result.stderr
kaudu.4.2 Vigade käsitlemine erandite abil
Kui käsu käivitamisel tekib viga, tõstab Python erandi. Seda saab käsitledatry-except
plokis:import subprocess
try:
subprocess.run(['invalid_command'], check=True)
except subprocess.CalledProcessError as e:
print(f"Tekkis viga: {e}")
Siin põhjustab check=True
erandi, kui käsk ebaõnnestub. See võimaldab logide salvestamist või alternatiivsete protsesside käivitamist.
5. Erinevused Windowsi, Maci ja Linuxi vahel
Pythonis käsu käivitamine võib erineda sõltuvalt operatsioonisüsteemist. Eriti Windowsi ja Unix-tüüpi süsteemide (Linux, macOS) vahel on olulisi erinevusi.5.1 Käskude käivitamine Windowsis
Windowsis käivitatakse käske käsuviibalt või PowerShellist. Näiteks kataloogi loendi kuvamiseks:import subprocess
subprocess.run(['dir'], shell=True)
Windowsis tuleb määrata shell=True
, et käivitada sisseehitatud käsud.5.2 Käskude käivitamine Unix-tüüpi süsteemides
Linuxis ja macOS-is saab käske käivitada otse. Näiteks kataloogi loendi saamiseks:import subprocess
subprocess.run(['ls', '-l'])
Unix-tüüpi süsteemides on käsu süntaks sageli lihtsam ja otsesem kui Windowsis.6. Kokkuvõte
Pythonis käskude käivitamine võimaldab failihalduse ja süsteemioperatsioonide automatiseerimist ning tõhusamat töövoogu.subprocess
moodul toetab nii põhikäivitusi, asünkroonset töötlemist kui ka torujuhtmeid. Lisaks võimaldab see paindlikku veahaldust. OS-i eripärasid silmas pidades saab Pythoniga luua turvalisi ja tõhusaid lahendusi. Käsu käivitamise tehnikate valdamine aitab igapäevast tööd automatiseerida ja programmeerimisoskust parandada. Soovitame kindlasti praktikas proovida!