Příklady Python Subprocess.Popen

Priklady Python Subprocess Popen



Podproces Pythonu je jedním z užitečných modulů, který se používá ke spouštění různých příkazů, procesů a dalších skriptů nebo spustitelných souborů pomocí skriptu Python. Může být také použit pro přesměrování dat z jednoho procesu do druhého a zpracování chyb, které jsou generovány podřízenými procesy. Modul subprocess má mnoho tříd, které se používají pro různé účely. Třída „subprocess.Popen“ je jednou z tříd tohoto modulu, která se používá k interakci s externími procesy a provádění různých typů úloh mezi procesy. Tento tutoriál ukazuje více použití třídy „subprocess.Popen“ ve skriptu Python.

Téma obsahu:

  1. Spusťte jednoduchý příkaz pro Linux
  2. Spusťte příkaz se vstupními daty
  3. Spusťte skript Python
  4. Zpracovat chybu podprocesu
  5. Vraťte kód Subprocess.Popen
  6. Přesměrujte výstup podprocesu do souboru
  7. Multiprocessing pomocí Subprocess.Popen
  8. Ovládejte vstupní a výstupní proud s
  9. Ovládejte časový limit a zpoždění
  10. Přečtěte si streamovaný vstup

Spusťte jednoduchý příkaz pro Linux

Příkaz „date“ se používá k zobrazení aktuálního systémového data a času. Vytvořte soubor Python pomocí následujícího skriptu, který vytvoří podproces, který provede příkaz „date“ a vytiskne výstup tohoto příkazu:

#Importujte modul

import podproces

#Definujte příkaz pro podproces a

#open proces pomocí funkce Popen().

výstup = podproces . Popen ( [ 'datum' ] , stdout = podproces . TRUBKA )

#Získejte výstup a chybu komunikací s procesem

stdout , stderr = výstup. komunikovat ( )

# Vytiskněte výstup

tisk ( stdout. dekódovat ( ) )

Výstup:







Po provedení předchozího skriptu se zobrazí následující výstup:



  p1



Přejít nahoru





Spusťte příkaz se vstupními daty

Příkaz „wc“ s volbou „-c“ se používá k počítání celkového počtu znaků hodnoty řetězce, která je součástí tohoto příkazu. Vytvořte soubor Python pomocí následujícího skriptu, který vytvoří podproces s funkcí Popen() pro spouštění příkazů „wc –c“. Hodnota řetězce se převezme z terminálu po provedení skriptu a celkový počet znaků vstupního řetězce se vytiskne na výstup.

#Importujte modul

import podproces

#Definujte příkaz pro podproces a

#Otevřete proces pomocí funkce Popen().

výstup = podproces . Popen ( [ 'toaleta' , '-C' ] , stdout = podproces . TRUBKA )

#Získejte výstup a chybu komunikací s procesem

stdout , stderr = výstup. komunikovat ( )

# Vytiskněte výstup

tisk ( stdout. dekódovat ( ) )

Výstup:



Pro vstupní hodnotu „Příklady podprocesů Pythonu“ se zobrazí následující výstup:

Přejít nahoru

Spusťte skript Python

Vytvořte soubor Python s názvem „sum.py“ pomocí následujícího skriptu, který vypočítá součet dvou čísel a tato čísla jsou poskytnuta jako argumenty příkazového řádku:

sum.py

#Importujte potřebný modul

import sys

#Spočítejte celkový počet argumentů

n = jen ( sys . argv )

#Přidejte první dvě hodnoty argumentu

součet = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

# Vytiskněte výsledek sčítání

tisk ( 'Součet ' + sys . argv [ 1 ] + ' a ' + sys . argv [ 2 ] + ' je' , součet )

Vytvořte Python soubor s následující skript, který spustí Python soubor jmenoval součet . py s dva argumenty vytvořením a podproces .

#Importujte modul

import podproces

#Spusťte skript python v podprocesu a

#otevřete proces pomocí funkce Popen().

výstup = podproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = podproces . TRUBKA ) #Získejte výstup a chybu komunikací s procesem

stdout , stderr = výstup. komunikovat ( )

# Vytiskněte výstup

tisk ( stdout. dekódovat ( ) )

Výstup:

Po provedení předchozího skriptu se zobrazí následující výstup:

Přejít nahoru

`

Zpracovat chybu podprocesu

Vytvořte soubor Python pomocí následujícího skriptu, který zpracovává chyby podprocesu pomocí bloku „try-except“. Příkaz je převzat od uživatele a je vykonán podprocesem. Chybová zpráva se zobrazí, pokud je od uživatele odebrán jakýkoli neplatný příkaz.

#Importujte moduly

import podproces

import sys

#Převzít příkaz od uživatele

příkaz = vstup ( 'Zadejte platný příkaz: ' )

Snaž se :

#Otevřete proces pomocí funkce Popen().

výstup = podproces . Popen ( [ příkaz ] , stdout = podproces . TRUBKA )

#Získejte výstup a chybu komunikací s procesem

stdout , stderr = výstup. komunikovat ( )

# Vytiskněte výstup

tisk ( stdout. dekódovat ( ) )

až na :

tisk ( 'Chyba:' , sys . exc_info ( ) )

Výstup:

Následující výstup se objeví, pokud je příkaz „pwd“ brán jako vstup, který je platným příkazem:

  p4-1

Následující výstup se objeví, pokud je příkaz „usr“ brán jako vstup, který je platným příkazem:

  p4-2

Přejít nahoru

Vraťte kód Subprocess.Popen

Vytvořte soubor Python pomocí následujícího skriptu, který provede příkaz „ls“ prostřednictvím podprocesu, aby získal seznam všech souborů Python z aktuálního umístění. Skript čeká na dokončení podprocesu a vytiskne návratový kód.

#Importujte moduly

import podproces

import sys

#Nastavte příkaz

příkaz = [ 'ls' , '-l' , '*.py' ]

Snaž se :

#Otevřete proces pomocí funkce Popen().

výstup = podproces . Popen ( příkaz , stdout = podproces . TRUBKA ,

stderr = podproces . TRUBKA , text = Skutečný )

#Počkejte na dokončení procesu

retCode = výstup. Počkejte ( )

#Vytiskněte návratový kód

tisk ( 'Návratový kód:' , retCode )

až na :

#Vytiskněte chybovou zprávu

tisk ( 'Chyba:' , sys . exc_info ( ) )

Výstup:

Podobný výstup se objeví po provedení předchozího skriptu:

Přejít nahoru

Přesměrujte výstup podprocesu do souboru

Vytvořte soubor Python pomocí následujícího skriptu, který zapíše výstup podprocesu do textového souboru. Příkaz, který je proveden podprocesem, je převzat od uživatele.

#Importní modul

import podproces

#Definujte název souboru

název souboru = 'outfile.txt'

#Proveďte příkaz ping

cmd = vstup ( 'Zadejte příkaz ping: ' )

#Rozdělit přijatý vstup na základě prostoru

argumenty = cmd . rozdělit ( )

#Zapište výstup příkazu do souboru

s OTEVŘENO ( název souboru , 'V' ) tak jako outdata:

proces = podproces . Popen ( argumenty , stdout = outdata )

#Počkejte na dokončení procesu

návratový_kód = proces. Počkejte ( )

Výstup:

Podle následujícího výstupu je „ping -c 3 www.google.com 'příkaz je převzat od uživatele a příkaz 'cat' se používá k zobrazení obsahu souboru, který je zapsán podprocesem:

Přejít nahoru

Multiprocessing pomocí Subprocess.Popen

Vytvořte soubor Python pomocí následujícího skriptu, kde je ukázáno použití multiprocessingu pomocí subprocess. Zde je funkce s názvem display_msg() volána vícekrát pomocí multiprocesingu.

#Importujte potřebné moduly

import multiprocessing

import podproces

#Definujte funkci, která bude volána multiprocesingem

def display_msg ( n ) :

#Definujte příkaz pomocí funkce format().

cmd = 'echo 'Python Programming'' . formát ( n )

#Otevřete proces pomocí funkce Popen().

proces = podproces . Popen ( cmd , skořápka = Skutečný , stdout = podproces . TRUBKA )

#Získejte výstup a chybu komunikací s procesem

stdout , chyba = proces. komunikovat ( )

# Vytiskněte výstup

tisk ( stdout. dekódovat ( ) )

#Zavolejte funkci 5x vytvořením multiprocessing.Pool

s multiprocessing. Bazén ( multiprocessing. cpu_count ( ) ) tak jako mp:

#Zmapujte funkci

t.t. mapa ( display_msg , rozsah ( 1 , 5 ) )

Výstup:

Po provedení předchozího skriptu se zobrazí následující výstup:

Přejít nahoru

Zvládejte vstupní a výstupní toky

Před vytvořením skriptu Python z tohoto příkladu vytvořte textový soubor s názvem „test.txt“ s následujícím obsahem.

test.txt

PERL

krajta

bash

php

Vytvořte soubor Python pomocí následujícího skriptu, který používá jeden podproces ke čtení obsahu souboru „test.txt“ a další podproces k vyhledávání konkrétního slova v tomto textovém souboru. Zde se slovo „python“ hledá v „souboru test.txt“, který toto slovo obsahuje.

#Import modulů

import podproces

#Definujte proces pro vstupní proud

v procesu = podproces . Popen ( [ 'kočka' , 'test.txt' ] , stdout = podproces . TRUBKA , text = Tru > #Definujte proces pro výstupní proud

out_process = podproces . Popen (

[ 'rukojeť' , 'krajta' ] , stdin = v procesu. stdout ,

stdout = podproces . TRUBKA , text = Skutečný )

#Uložte výstup vstupních a výstupních procesů

výstup , _ = out_process. komunikovat ( )

# Vytiskněte výstup

tisk ( 'Výstup:' , výstup )

Výstup:

Po spuštění skriptu se zobrazí následující výstup:

Přejít nahoru

Ovládejte dílčí proces pomocí časovače

Vytvořte soubor Python pomocí následujícího skriptu, který používá časovač ke spuštění příkazu pomocí podprocesu. Zde se blok „try-except“ používá ke spuštění časovače a blok „konečně“ se používá ke zrušení časovače.

#Importujte modul podprocesu

import podproces

#Importujte modul Timer

z závitování import Časovač

#Definujte příkaz

cmd = [ 'ping' , 'www.example.com' ]

#Otevřete proces

p = podproces . Popen (

cmd , stdout = podproces . TRUBKA , stderr = podproces . TRUBKA )

# Definujte časovač

časovač = Časovač ( 2 , lambda proces: proces. zabít ( ) , [ p ] )

Snaž se :

#Spusťte časovač

časovač. Start ( )

#Přečtěte si výstup

stdout , _ = p. komunikovat ( )

#Tiskový výstup

tisk ( stdout. dekódovat ( ) )

až na :

#Vytiskněte chybovou zprávu

tisk ( 'Chyba:' , sys . exc_info ( ) )

Konečně :

#Zastavte časovač

časovač. zrušení ( )

Výstup:

Po spuštění skriptu se zobrazí následující výstup:

Přejít nahoru

Přečtěte si vstup pro streamování

Vytvořte soubor Python, který čte obsah výstupu podprocesu pomocí smyčky „while“ a ukládá obsah do proměnné. Obsah této proměnné se vytiskne později. Zde je příkaz „curl“ použit v podprocesu pro www.google.com URL.

#Importní modul

import podproces

#Definovat příkaz

cmd = [ 'kučera' , 'www.example.com' ]

p = podproces . Popen ( cmd , stdout = podproces . TRUBKA ,

stderr = podproces . TRUBKA , text = Skutečný >

#Inicializujte výstupní proměnnou

výstup = ''

zatímco Skutečný :

#Přečtěte si výstup procesu řádek po řádku

ln = p. stdout . readline ( )

#Po dokončení podprocesu ukončete smyčku

-li ne ln:

přestávka

výstup = výstup + ln

#Vytiskněte řádek

tisk ( výstup )

#Po dokončení procesu získejte návratový kód

návratový_kód = p. Počkejte ( )

#Vytiskněte návratový kód

tisk ( 'Návratový kód: ' , návratový_kód )

Výstup:

Poslední část ze tří výstupů je znázorněna na následujícím obrázku. Návratový kód po dokončení dílčího procesu je 0:

Přejít nahoru

Závěr

Různá použití Python subprocess.Popen() jsou ukázána v tomto tutoriálu pomocí více Python skriptů, které pomohou uživatelům Pythonu poznat základní použití této funkce.