Underprocessen.kør metode
Underprocessen.run-metoden tager en liste over argumenter. Når metoden kaldes, udfører den kommandoen og venter på, at processen er færdig, hvilket returnerer et "CompletedProcess" -objekt til sidst. Objektet "CompletedProcess" returnerer stdout, stderr, originale argumenter, der blev brugt under kald til metoden, og en returkode. Stdout refererer til datastrømmen produceret af kommandoen, mens stderr henviser til eventuelle fejl, der er rejst under udførelsen af programmet. Enhver ikke-nul-returkode (exit-kode) vil betyde fejl med kommandoen, der udføres i underprocessen.køre metode.
Eksempel 1: Outputindhold i en tekstfil ved hjælp af underprocessen.kør metode
Kommandoen nedenfor udsender indholdet af “data.txt ”-fil, forudsat at den indeholder en” name = John ”-streng.
import underprocesunderproces.kør (["kat", "data.txt "])
At køre ovenstående kode returnerer følgende output:
navn = JohnCompletedProcess (args = ['cat', 'data.txt '], returkode = 0)
Det første element i listeargumentet er navnet på den kommando, der skal udføres. Ethvert element på listen, der følger det første element, betragtes som kommandolinjevalg eller switche. Du kan også bruge et enkelt bindestreg og dobbelt bindestreg til at definere indstillingerne. For eksempel for at liste filer og mapper i et bibliotek, ville koden være “underproces.kør ([“ls”, “-l”] ”. I de fleste af disse tilfælde kan du overveje ethvert rumadskilt argument i en shell-kommando som et individuelt element på listen leveret til underprocessen.køre metode.
Eksempel 2: Undertryk output af underproces.kør metode
At undertrykke output fra underprocessen.kør metode, skal du levere “stdout = underproces.DEVNULL ”og“ stderr = underproces.DEVNULL ”som yderligere argumenter.
import underprocesunderproces.kør (["kat", "data.txt "], stdout = underproces.DEVNULL,
stderr = underproces.DEVNULL)
At køre ovenstående kode vil producere følgende output:
CompletedProcess (args = ['cat', 'data.txt '], returkode = 0)Eksempel 3: Capture Output of Subprocess.kør metode
At fange output fra underprocessen.kør metode, brug et ekstra argument med navnet “capture_output = True”.
import underprocesoutput = underproces.kør (["kat", "data.txt "], capture_output = Sand)
udskriv (output)
At køre ovenstående kode vil producere følgende output:
CompletedProcess (args = ['cat', 'data.txt '], returkode = 0,stdout = b'name = John \ n ', stderr = b ")
Du kan få adgang til stdout- og stderr-værdier individuelt ved hjælp af “output.stdout ”og“ output.stderr ”-metoder. Outputtet produceres som en bytesekvens. For at få en streng som output skal du bruge “output.stdout.afkode (“utf-8”) ”metode. Du kan også levere "text = True" som et ekstra argument til underprocessen.kør opkald for at få output i strengformat. For at få udgangsstatuskode kan du bruge “output.returncode ”metode.
Eksempel 4: Hæv undtagelsen ved manglende kommando udført af underproces.kør metode
For at hæve en undtagelse, når kommandoen afsluttes med en status, der ikke er nul, skal du bruge argumentet "check = True".
import underprocesunderproces.kør (["kat", "data.tx "], capture_output = True, text = True, check = True)
At køre ovenstående kode vil producere følgende output:
hæve CalledProcessError (retcode, proces.argumenterer,underproces.CalledProcessError: Kommando '[' cat ',' data.tx ']'
returnerede ikke-nul udgangsstatus 1.
Eksempel 5: Send en streng til kommando udført af underprocessen.kør metode
Du kan sende en streng til kommandoen, der skal udføres af underproces.kør metode ved hjælp af "input = 'string'" argument.
import underprocesoutput = underproces.kør (["cat"], input = "data.txt ", capture_output = Sandt,
text = True, check = True)
udskriv (output)
At køre ovenstående kode vil producere følgende output:
CompletedProcess (args = ['cat'], returncode = 0, stdout = "data.txt ", stderr =")Som du kan se, overfører koden ovenfor “data.txt ”som en streng og ikke som et filobjekt. At videregive “data.txt ”som en fil, brug argumentet“ stdin ”.
med åben ("data.txt ") som f:output = underproces.kør (["cat"], stdin = f, capture_output = True,
text = True, check = True)
udskriv (output)
At køre ovenstående kode vil producere følgende output:
CompletedProcess (args = ['cat'], returncode = 0, stdout = "name = John \ n", stderr = ")Eksempel 6: Udfør kommando direkte i Shell ved hjælp af underprocessen.kør metode
Det er muligt at køre en kommando direkte i en shell "som den er" i stedet for at bruge en strengopdeling i hovedkommandoen og de muligheder, der følger den. For at gøre dette skal du videregive “shell = True” som et yderligere argument. Dette frarådes dog af pythonudviklere, da brug af "shell = True" kan føre til sikkerhedsproblemer. Du kan læse mere om sikkerhedsimplikationer herfra.
import underprocesunderproces.kør ("kat" data.txt '", shell = True)
At køre ovenstående kode vil producere følgende output:
navn = JohnKonklusion
Underprocessen.Kør metoden i Python er ret kraftig, da den giver dig mulighed for at køre shell-kommandoer i selve python. Dette hjælper med at begrænse al kode til selve python uden behov for at have yderligere shell-scriptkode i separate filer. Det kan dog være ret vanskeligt at korrekt tokenize shell-kommandoer i en pythonliste. Du kan bruge “shlex.split () ”metode til tokenisering af enkle shell-kommandoer, men i lange, komplekse kommandoer - især dem med rørsymboler - kan shlex ikke opdele kommandoen korrekt. I sådanne tilfælde kan fejlfinding være et vanskeligt problem. Du kan bruge argumentet “shell = True” for at undgå dette, men der er visse sikkerhedsproblemer forbundet med denne handling.