Pythonis käsurea käivitamine: täielik juhend algajatele ja edasijõudnutele

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 kasutada os.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, saab subprocess 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äsitleda try-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!
侍エンジニア塾