Apakšprocess.palaist metodi
Apakšprocess.palaišanas metode ņem argumentu sarakstu. Kad metode tiek izsaukta, tā izpilda komandu un gaida procesa pabeigšanu, beigās atgriežot objektu “CompletedProcess”. Objekts “CompletedProcess” atgriež stdout, stderr, sākotnējos argumentus, kas izmantoti, izsaucot metodi, un atgriešanās kodu. Stdout attiecas uz komandas izveidoto datu straumi, bet stderr - uz visām kļūdām, kas radušās programmas izpildes laikā. Jebkurš atgriešanās kods, kas nav nulle, (izejas kods) nozīmētu kļūdu ar komandu, kas izpildīta apakšprocesā.palaišanas metode.
1. piemērs: Teksta faila saturs, izmantojot apakšprocesu.palaist metodi
Zemāk esošā komanda izdos “datu.txt ”fails, pieņemot, ka tajā ir virkne“ name = John ”.
importa apakšprocessapakšprocess.palaist (["kaķis", "dati.txt "])
Palaidot iepriekš minēto kodu, tiks parādīta šāda izeja:
vārds = JānisCompletedProcess (args = ['kaķis', 'dati.txt '], atgriešanās kods = 0)
Saraksta argumenta pirmais elements ir izpildāmās komandas nosaukums. Jebkurš saraksta elements, kas seko pirmajam elementam, tiek uzskatīts par komandrindas opcijām vai slēdžiem. Lai definētu opcijas, varat izmantot arī vienu un divas domuzīmes. Piemēram, lai direktorijā uzskaitītu failus un mapes, kods būtu “apakšprocess.palaist ([“ls”, “-l”] ”. Lielākoties šajos gadījumos jebkuru ar atstarpēm atdalītu argumentu čaulas komandā varat uzskatīt par atsevišķu elementu apakšprocesam piegādātajā sarakstā.palaišanas metode.
2. piemērs: Apspiediet apakšprocesa izvadi.palaist metodi
Lai nomāktu apakšprocesa izvadi.palaist metodi, jums būs jāpiegādā “stdout = subprocess.ATTĪSTĪBA ”un“ stderr = apakšprocess.DEVNULL ”kā papildu argumentus.
importa apakšprocessapakšprocess.palaist (["kaķis", "dati.txt "], stdout = apakšprocess.ATTĪSTĪT,
stderr = apakšprocess.ATTĪSTĪBA)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
CompletedProcess (args = ['kaķis', 'dati.txt '], atgriešanās kods = 0)3. piemērs: Apakšprocesa izvades tveršana.palaist metodi
Lai notvertu apakšprocesa izvadi.palaišanas metodi, izmantojiet papildu argumentu ar nosaukumu “capture_output = True”.
importa apakšprocessizeja = apakšprocess.palaist (["kaķis", "dati.txt "], capture_output = True)
izdruka (izeja)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
CompletedProcess (args = ['kaķis', 'dati.txt '], atgriešanās kods = 0,stdout = b'name = John \ n ', stderr = b ")
Varat individuāli piekļūt stdout un stderr vērtībām, izmantojot “output”.stdout ”un“ output.stderr ”metodes. Rezultāts tiek ražots kā baitu secība. Lai iegūtu izvades virkni, izmantojiet “output.stdout.dekodēt (“utf-8”) ”metodi. Apakšprocesam kā papildu argumentu varat norādīt arī tekstu “True”.palaist zvanu, lai iegūtu izvadi virknes formātā. Lai iegūtu izejas statusa kodu, varat izmantot “output.atgriešanās kods ”metodi.
4. piemērs: palieliniet izņēmumu par apakšprocesa izpildītās komandas atteici.palaist metodi
Lai izvirzītu izņēmumu, kad komanda iziet ar statusu, kas nav nulle, izmantojiet argumentu “check = True”.
importa apakšprocessapakšprocess.palaist (["kaķis", "dati.tx "], capture_output = True, text = True, check = True)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
paaugstināt CalledProcessError (pārkodēt, process.argumentē,apakšprocess.CalledProcessError: komanda '[' cat ',' data.tx ']'
atgriezts izejas statuss, kas nav nulle 1.
5. piemērs: nododiet virkni komandai, kuru izpilda apakšprocess.palaist metodi
Jūs varat nodot virkni komandai, kas jāizpilda ar apakšprocesu.palaist metodi, izmantojot argumentu “input = 'string' '.
importa apakšprocessizeja = apakšprocess.palaist (["kaķis"], input = "dati.txt ", capture_output = True,
teksts = taisnība, pārbaude = taisnība)
izdruka (izeja)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
CompletedProcess (args = ['cat'], atgriešanās kods = 0, stdout = "dati.txt ", stderr =")Kā redzat, iepriekš minētais kods nodod “datus.txt ”kā virkni, nevis kā faila objektu. Lai nodotu “datus.txt ”kā failu, izmantojiet argumentu“ stdin ”.
ar atvērtu ("dati.txt ") kā f:izeja = apakšprocess.palaist (["kaķis"], stdin = f, capture_output = True,
teksts = taisnība, pārbaude = taisnība)
izdruka (izeja)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
CompletedProcess (args = ['cat'], atgriešanās kods = 0, stdout = "name = John \ n", stderr = ")6. piemērs: izpildiet komandu tieši čaulā, izmantojot apakšprocesu.palaist metodi
Ir iespējams palaist komandu tieši tādā čaulā, kāda tā ir, nevis izmantot virknes sadalījumu galvenajā komandā un opcijas, kas tai seko. Lai to izdarītu, jums kā papildu arguments jānokārto “shell = True”. Python izstrādātāji tomēr to attur, jo “shell = True” izmantošana var izraisīt drošības problēmas. Šeit varat uzzināt vairāk par drošības ietekmi.
importa apakšprocessapakšprocess.palaist ("kaķu" dati.txt '", apvalks = True)
Palaidot iepriekš minēto kodu, tiks izveidota šāda izeja:
vārds = JānisSecinājums
Apakšprocess.palaist metode Python ir diezgan spēcīga, jo tā ļauj palaist čaulas komandas pašā pitonā. Tas palīdz ierobežot visu kodu līdz pašam pitonam, bez nepieciešamības atsevišķos failos pievienot papildu čaulas skripta kodu. Pareizi tokenizēt čaulas komandas pitonu sarakstā var būt diezgan sarežģīti. Jūs varat izmantot “shlex.split () ”metode vienkāršu čaulas komandu marķēšanai, bet garās, sarežģītās komandās - īpaši komandās ar caurules simboliem - shlex neizdodas pareizi sadalīt komandu. Šādos gadījumos atkļūdošana var būt grūts jautājums. Lai to izvairītos, varat izmantot argumentu “shell = True”, taču ar šo darbību ir saistītas noteiktas drošības problēmas.