Alamprotsess.käivitage meetod
Alamprotsess.run meetod võtab argumentide loendi. Meetodi kutsumisel täidab see käsu ja ootab protsessi lõppu, tagastades lõpuks objekti "CompletedProcess". Objekt “CompletedProcess” tagastab stdout, stderr, meetodi kutsumisel kasutatud algsed argumendid ja tagastuskoodi. Stdout viitab käsu loodud andmevoole, stderr aga programmi täitmisel tekkinud vigadele. Mis tahes nullist erinev tagastuskood (väljumiskood) tähendaks viga alamprotsessis täidetud käsuga.jooksu meetod.
Näide 1: Tekstifaili väljundsisu alamprotsessi abil.käivitage meetod
Alltoodud käsk väljastab „data.txt ”fail, eeldades, et see sisaldab stringi“ name = John ”.
impordi alamprotsessalamprotsess.run (["kass", "andmed.txt "])
Ülaltoodud koodi käivitamisel tagastatakse järgmine väljund:
nimi = JohannesCompletedProcess (args = ['kass', 'andmed.txt '], tagastuskood = 0)
Loendi argumendi esimene element on käivitatava käsu nimi. Mis tahes elementi loendis, mis järgneb esimesele elemendile, loetakse käsurea suvanditeks või lülititeks. Valikute määratlemiseks võite kasutada ka ühe ja kahe kriipsu. Näiteks failide ja kaustade kataloogis loetlemiseks oleks kood „alamprotsess.run ([“ls”, “-l”] ”. Enamikul juhtudel võite shellikäskudes kõiki tühikutega eraldatud argumente pidada alamprotsessile tarnitud loendi üksikuteks elementideks.jooksu meetod.
Näide 2: Alamprotsessi väljundi pärssimine.käivitage meetod
Alamprotsessi väljundi pärssimiseks.käitamismeetodi korral peate sisestama „stdout = alamprotsess.ARENG ”ja„ stderr = alamprotsess.DEVNULL ”täiendavate argumentidena.
impordi alamprotsessalamprotsess.run (["kass", "andmed.txt "], stdout = alamprotsess.ARENG,
stderr = alamprotsess.ARENG)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
CompletedProcess (args = ['kass', 'andmed.txt '], tagastuskood = 0)Näide 3: alamprotsessi väljundi hõivamine.käivitage meetod
Alamprotsessi väljundi hõivamiseks.käitamismeetodi jaoks kasutage täiendavat argumenti nimega "capture_output = True".
impordi alamprotsessväljund = alamprotsess.run (["kass", "andmed.txt "], capture_output = True)
print (väljund)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
CompletedProcess (args = ['kass', 'andmed.txt '], tagastuskood = 0,stdout = b'nimi = John \ n ', stderr = b ")
Stdout ja stderr väärtustele pääseb individuaalselt juurde, kasutades väljundit.stdout ”ja“ väljund.stderr ”meetodid. Väljund toodetakse baitide jadana. Stringi saamiseks väljundina kasutage väljundit.stdout.dekodeerida (“utf-8”) ”meetod. Alamprotsessile saate lisada ka täiendava argumendi "text = True".käivitage kõne, et saada väljund stringivormingus. Väljumise olekukoodi saamiseks võite kasutada väljundit.tagastuskood ”meetod.
Näide 4: suurendage erandit alamprotsessi poolt käivitatud käsu ebaõnnestumise korral.käivitage meetod
Erandi tegemiseks, kui käsk väljub olekuga nullist erinev, kasutage argumenti "check = True".
impordi alamprotsessalamprotsess.run (["kass", "andmed.tx "], capture_output = True, text = True, check = True)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
tõsta CalledProcessError (uuesti kood, protsess.vaidleb vastu,alamprotsess.CalledProcessError: käsk '[' kass ',' andmed.tx ']'
tagastas nullist väljumise oleku 1.
Näide 5: andke alamprotsessi poolt täidetavale käsule string.käivitage meetod
Alamprotsessi abil täidetavale käsule saate edastada stringi.käivitage meetod, kasutades argumenti “input = 'string' '.
impordi alamprotsessväljund = alamprotsess.run (["kass"], input = "andmed.txt ", capture_output = True,
tekst = tõene, kontroll = tõene)
print (väljund)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
CompletedProcess (args = ['kass'], tagastuskood = 0, stdout = "andmed.txt ", stderr =")Nagu näete, edastab ülaltoodud kood andmeid.txt ”stringina, mitte failiobjektina. Andmete edastamiseks.txt ”failina, kasutage argumenti“ stdin ”.
avatud ("andmetega.txt ") kui f:väljund = alamprotsess.run (["kass"], stdin = f, capture_output = True,
tekst = tõene, kontroll = tõene)
print (väljund)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
CompletedProcess (args = ['kass'], tagastuskood = 0, stdout = "nimi = John \ n", stderr = ")Näide 6: käivitage käsk otse Shellis alamprotsessi abil.käivitage meetod
Käsk on võimalik käivitada otse sellisesse kestasse, nagu see on, selle asemel, et kasutada põhikäsus jaotatud stringi ja sellele järgnevaid valikuid. Selleks peate täiendava argumendina edastama “shell = True”. Püütoniarendajad ei soovita seda siiski teha, kuna “shell = True” kasutamine võib põhjustada turvaküsimusi. Turvamõjude kohta saate lugeda siit.
impordi alamprotsessalamprotsess.run ("kassi" andmed.txt '", kest = True)
Ülaltoodud koodi käivitamine annab järgmise väljundi:
nimi = JohannesJäreldus
Alamprotsess.Run-meetod Pythonis on üsna võimas, kuna see võimaldab teil käskude käskude käivitamist Pythoni enda sees. See aitab piirata kogu koodi pythoniga ise, ilma et oleks vaja eraldi failides täiendavat shelliskripti koodi. Püütoniloendis olevate shellikäskude õigesti tokeniseerimine võib olla aga üsna keeruline. Võite kasutada "shlex.split () ”meetod lihtsate shellikäskude tokeniseerimiseks, kuid pikkades keerukates käskudes - eriti torusümboolikaga - ei suuda shlex käsku õigesti jagada. Sellistel juhtudel võib silumine olla keeruline probleem. Selle vältimiseks võite kasutada argumenti „shell = True”, kuid selle toiminguga on seotud teatud turvalisusega seotud probleemid.