Underprosessen.Kjør metode
Underprosessen.Kjørmetode tar en liste over argumenter. Når metoden kalles, utfører den kommandoen og venter på at prosessen skal fullføre, og returnerer et "fullført prosess" -objekt til slutt. "Fullført prosess" -objekt returnerer stdout, stderr, originale argumenter som brukes mens du ringer til metoden, og en returkode. Stdout refererer til datastrømmen produsert av kommandoen, mens Stderr refererer til eventuelle feil som er reist under utførelse av programmet. Enhver ikke-null returkode (exit code) vil bety feil med kommandoen utført i underprosessen.Kjør metode.
Eksempel 1: Outputinnhold i en tekstfil ved hjelp av underprosessen.Kjør metode
Kommandoen nedenfor vil sende inn innholdet i en “Data.txt ”-fil, forutsatt at den inneholder en“ name = john ”-streng.
Importer underprosessÅ kjøre koden over vil returnere følgende utdata:
Navn = JohnDet første elementet i listeargumentet er navnet på kommandoen som skal utføres. Ethvert element i listen som følger det første elementet, regnes som kommandolinjealternativer eller brytere. Du kan også bruke enkeltstrikker og doble streker for å definere alternativene. For å liste opp filer og mapper i en katalog, vil koden for eksempel være “Underprosess.løp ([“ls”, “-l”] ”. I de fleste av disse tilfellene kan du vurdere ethvert rom-separert argument i en Shell-kommando som et individuelt element på listen levert til underprosessen.Kjør metode.
Eksempel 2: Undertrykkende utgang av underprosess.Kjør metode
Å undertrykke utgangen fra underprosessen.Kjør metode, du må levere “stdout = underprosess.DevNull ”og“ Stderr = underprosess.Devnull ”som flere argumenter.
Importer underprosessÅ kjøre koden over vil produsere følgende utgang:
Fullført prosess (args = ['katt', 'data.txt '], returncode = 0)Eksempel 3: Fang utgang av underprosess.Kjør metode
For å fange utgangen fra underprosessen.Kjør metode, bruk et tilleggsargument kalt “Capture_output = True”.
Importer underprosessÅ kjøre koden over vil produsere følgende utgang:
Fullført prosess (args = ['katt', 'data.txt '], returncode = 0,Du kan få tilgang til Stdout- og STDERR -verdier individuelt ved å bruke “Output.stdout ”og“ output.stderr ”-metoder. Utgangen produseres som en byte -sekvens. For å få en streng som utgang, bruk “output.stdout.dekode (“UTF-8”) ”-metode. Du kan også levere "tekst = sant" som et ekstra argument til underprosessen.Kjør samtale for å få utdataene i strengformat. For å få statsstatuskode, kan du bruke “Output.ReturnCode ”-metode.
Eksempel 4: Hev unntak ved svikt i kommandoen utført av underprosess.Kjør metode
For å heve et unntak når kommandoen går ut med en status som ikke er null, bruk argumentet "sjekk = sant".
Importer underprosessÅ kjøre koden over vil produsere følgende utgang:
heve kalt prosessror (retcode, prosess.Args,Eksempel 5: Pass en streng til kommando utført av underprosessen.Kjør metode
Du kan gi en streng til kommandoen som skal utføres av underprosess.Kjør metode ved å bruke "input = 'String'” -argument.
Importer underprosessÅ kjøre koden over vil produsere følgende utgang:
Fullført prosess (args = ['cat'], returncode = 0, stdout = 'data.txt ', stderr = ")Som du ser, passerer koden over “Data.txt ”som en streng og ikke som et filobjekt. Å passere “data.txt ”som en fil, bruk“ stdin ”-argumentet.
med åpne ("Data.txt ") som f:Å kjøre koden over vil produsere følgende utgang:
FullførtProcess (args = ['cat'], returncode = 0, stdout = 'name = John \ n', stderr = ")Eksempel 6: Utfør kommandoen direkte i Shell ved hjelp av underprosessen.Kjør metode
Det er mulig å kjøre en kommando direkte inn i et skall "som den er", i stedet for å bruke en streng delt i hovedkommandoen og alternativene som følger den. For å gjøre dette, må du passere “skall = sant” som et ekstra argument. Dette er imidlertid motløs av Python -utviklere som bruk av "shell = true" kan føre til sikkerhetsproblemer. Du kan lese mer om sikkerhetsmessige implikasjoner herfra.
Importer underprosessÅ kjøre koden over vil produsere følgende utgang:
Navn = JohnKonklusjon
Underprosessen.Kjøremetode i Python er ganske kraftig, da den lar deg kjøre skallkommandoer i Python selv. Dette hjelper med å begrense all kode til å python seg selv uten å ha ekstra skallskriptkode i separate filer. Det kan imidlertid være ganske vanskelig å ta rekkenalisere skallkommandoer i en Python -liste. Du kan bruke “Shlex.split () ”metode for å tokenisere enkle skallkommandoer, men i lange, komplekse kommandoer - spesielt de med rørsymboler - klarer ikke Shlex å dele kommandoen riktig. I slike tilfeller kan feilsøking være et vanskelig spørsmål. Du kan bruke "Shell = True" -argumentet for å unngå dette, men det er visse sikkerhetsproblemer knyttet til denne handlingen.