Potvarkis.paleisti metodą
Potvarkis.metodas paleidžia argumentų sąrašą. Kai metodas iškviečiamas, jis vykdo komandą ir laukia, kol procesas bus baigtas, galų gale pateikdamas objektą „CompletedProcess“. Objektas „CompletedProcess“ pateikia stdout, stderr, originalius argumentus, naudojamus iškviečiant metodą, ir grąžinimo kodą. „Stdout“ reiškia duomenų srautą, kurį sukuria komanda, o „stderr“ - klaidas, iškilusias vykdant programą. Bet koks nulio grąžinimo kodas (išėjimo kodas) reikštų klaidą vykdant komandą, vykdomą pakopoje.paleidimo metodas.
1 pavyzdys: Teksto failo išvesties turinys naudojant antrinį procesą.paleisti metodą
Žemiau pateikta komanda išves „duomenų.txt “failas, darant prielaidą, kad jame yra„ name = John “eilutė.
importo antrinis procesasantrinis procesas.paleisti (["katė", "duomenys.txt "])
Paleidus aukščiau esantį kodą bus grąžinta ši išvestis:
vardas = JonasCompletedProcess (args = ['katė', 'duomenys.txt '], grąžinimo kodas = 0)
Pirmasis sąrašo argumento elementas yra vykdytinos komandos pavadinimas. Bet kuris sąrašo elementas, einantis po pirmo elemento, laikomas komandinės eilutės parinktimis arba jungikliais. Taip pat galite naudoti vieno brūkšnio ir dvigubus brūkšnelius, kad apibrėžtumėte parinktis. Pavyzdžiui, norint kataloge išvardyti failus ir aplankus, kodas būtų „subprocess.paleisti ([„ls“, „-l“] “. Dažniausiai šiais atvejais bet kurį apvalkalo komandoje esantį tarpą atskirtą argumentą galite laikyti atskiru elementu sąraše, pateiktame pakopai.paleidimo metodas.
2 pavyzdys: nutraukti antrinio proceso išvestį.paleisti metodą
Norėdami užgniaužti pakopos išvestį.paleidimo metodą, turėsite pateikti „stdout = subprocess“.DEVNULL “ir„ stderr = antrinis procesas.DEVNULL “kaip papildomus argumentus.
importo antrinis procesasantrinis procesas.paleisti (["katė", "duomenys.txt "], stdout = antrinis procesas.DEVNULL,
stderr = antrinis procesas.DEVNULL)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
CompletedProcess (args = ['katė', 'duomenys.txt '], grąžinimo kodas = 0)3 pavyzdys: užfiksuokite antrinio proceso išvestį.paleisti metodą
Norėdami užfiksuoti antrinio proceso rezultatus.paleidimo metodą, naudokite papildomą argumentą pavadinimu „capture_output = True“.
importo antrinis procesasprodukcija = antrinis procesas.paleisti (["katė", "duomenys.txt "], capture_output = True)
spausdinti (išvestis)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
CompletedProcess (args = ['katė', 'duomenys.txt '], grįžimo kodas = 0,stdout = b'name = John \ n ', stderr = b ")
Galite atskirai pasiekti „stdout“ ir „stderr“ reikšmes naudodami „output“.stdout “ir„ produkcija.stderr “metodai. Išvestis gaminama kaip baitų seka. Norėdami gauti eilutę kaip išvestį, naudokite „output“.stdout.dekoduoti („utf-8“) “metodą. Taip pat galite pateikti „text = True“ kaip papildomą argumentą antriniam procesui.paleisti skambutį, kad gautumėte išvestį eilutės formatu. Norėdami gauti išėjimo būsenos kodą, galite naudoti išvestį.grįžimo kodas “metodą.
4 pavyzdys. Padidinkite išimtį dėl nesugebėjimo vykdyti komandą, vykdomo pakopinio proceso metu.paleisti metodą
Norėdami išimti išimtį, kai komanda išeina su nulio būsena, naudokite argumentą „check = True“.
importo antrinis procesasantrinis procesas.paleisti (["katė", "duomenys.tx "], capture_output = True, text = True, check = True)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
pakelti CalledProcessError (perkoduoti, apdoroti.argumentuoja,antrinis procesas.CalledProcessError: komanda „[“ katė “,“ duomenys.tx ']'
grąžino nulio nulinę išėjimo būseną 1.
5 pavyzdys: perduokite eilutę komandai, kurią vykdo antrinis procesas.paleisti metodą
Galite perduoti eilutę komandai, kuri bus vykdoma pagal antrinį procesą.paleisti metodą, naudojant argumentą „input = 'string' '.
importo antrinis procesasprodukcija = antrinis procesas.paleisti (["katė"], input = "duomenys.txt ", capture_output = Tiesa,
tekstas = tiesa, patikrinkite = tiesa)
spausdinti (išvestis)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
CompletedProcess (args = ['katė'], grįžimo kodas = 0, stdout = "duomenys.txt ", stderr =")Kaip matote, aukščiau pateiktas kodas perduoda „duomenis.txt “kaip eilutę, o ne kaip failo objektą. Norėdami perduoti „duomenis.txt “kaip failą, naudokite argumentą„ stdin “.
su atviraisiais ("duomenimis.txt ") kaip f:produkcija = antrinis procesas.paleisti (["katė"], stdin = f, capture_output = True,
tekstas = tiesa, patikrinkite = tiesa)
spausdinti (išvestis)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
„CompletedProcess“ (args = ['katė'], grįžimo kodas = 0, stdout = "vardas = Jonas \ n", stderr = ")6 pavyzdys: vykdykite komandą tiesiogiai „Shell“, naudodami antrinį procesą.paleisti metodą
Komandą galima paleisti tiesiai į apvalkalą „koks yra“, užuot naudojus eilutę, padalytą pagrindinėje komandoje ir po jos esančiomis parinktimis. Norėdami tai padaryti, turite perduoti „shell = True“ kaip papildomą argumentą. Tačiau Python kūrėjai to nenori, nes naudojant „shell = True“ gali kilti saugumo problemų. Čia galite daugiau sužinoti apie saugumo pasekmes.
importo antrinis procesasantrinis procesas.paleisti ("katės" duomenys.txt '", apvalkalas = Tiesa)
Paleidus aukščiau esantį kodą bus sukurtas toks išvestis:
vardas = JonasIšvada
Procesas.„Run“ metodas „Python“ yra gana galingas, nes leidžia paleisti apvalkalo komandas pačiame „Python“. Tai padeda apriboti visą kodą iki paties pitono, nereikalaujant papildomo apvalkalo scenarijaus kodo atskiruose failuose. Tačiau gali būti gana keblu teisingai žymėti apvalkalo komandas pitonų sąraše. Galite naudoti „shlex.split () “metodas paprastoms apvalkalo komandoms žymėti, tačiau ilgose, sudėtingose komandose, ypač turinčiose vamzdžių simbolius, shlex nepavyksta teisingai padalyti komandos. Tokiais atvejais derinimas gali būti keblus klausimas. Norėdami to išvengti, galite naudoti argumentą „shell = True“, tačiau su šiuo veiksmu yra susijusių tam tikrų saugumo problemų.