Python

Shellikäskude täitmine Pythonis alamprotsessi käitamise meetodi abil

Shellikäskude täitmine Pythonis alamprotsessi käitamise meetodi abil
Alamprotsess on sisseehitatud Pythoni moodul, mida saab kasutada uute protsesside loomiseks ning nende sisend- ja väljundandmevoogudega suhtlemiseks. Lihtsamalt öeldes saate seda kasutada shellikäskude käivitamiseks ja käivitatavate binaarkaartide käitamiseks, mis on tavaliselt hajutatud Linuxi failisüsteemi erinevates kausta. Võite anda ka käivitatava binaarse täieliku tee ja kasutada kõiki binaariga seotud käsurea lülitit. Selles artiklis selgitatakse, kuidas kasutada alamprotsessi moodulit ja selle käitamismeetodit Pythoni rakendustes. Kõiki artikli koodinäiteid testitakse Python 3-ga.8.2 Ubuntu 20-l.04.

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 alamprotsess
alamprotsess.run (["kass", "andmed.txt "])

Ülaltoodud koodi käivitamisel tagastatakse järgmine väljund:

nimi = Johannes
CompletedProcess (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 alamprotsess
alamprotsess.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 alamprotsess
vä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 alamprotsess
alamprotsess.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 alamprotsess
vä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 alamprotsess
alamprotsess.run ("kassi" andmed.txt '", kest = True)

Ülaltoodud koodi käivitamine annab järgmise väljundi:

nimi = Johannes

Jä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.

Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...
Sid Meieri Civilization VI allalaadimine ja mängimine Linuxis
Sissejuhatus mängu Civilization 6 on kaasaegne kontseptsioon, mis tutvustati Age of Empires mängude sarjas. Idee oli üsna lihtne; alustaksite kõige põ...
Kuidas installida ja mängida Doomi Linuxis
Doomi sissejuhatus Doom-seeria sai alguse 90ndatel pärast algse Doomi väljaandmist. See oli kohene hitt ja sellest ajast alates on mänguseeria pälvinu...