Podproces Pythona.Popen Przykłady

Podproces Pythona Popen Przyklady



Podproces Pythona to jeden z przydatnych modułów, który służy do uruchamiania różnych poleceń powłoki, procesów i wykonywania innego skryptu lub plików wykonywalnych za pomocą skryptu Pythona. Można go również wykorzystać do przekierowywania danych z jednego procesu do drugiego i obsługi błędów generowanych przez procesy potomne. Moduł subprocess ma wiele klas używanych do różnych celów. Klasa „subprocess.Popen” jest jedną z klas tego modułu, która służy do interakcji z procesami zewnętrznymi i wykonywania różnego rodzaju zadań pomiędzy procesami. W tym samouczku pokazano wiele zastosowań klasy „subprocess.Popen” w skrypcie Pythona.

Temat treści:

  1. Uruchom proste polecenie systemu Linux
  2. Uruchom polecenie z danymi wejściowymi
  3. Uruchom skrypt Pythona
  4. Obsłuż błąd podprocesu
  5. Zwróć kod Subprocess.Popen
  6. Przekieruj wyjście podprocesu do pliku
  7. Przetwarzanie wieloprocesowe przy użyciu Subprocess.Popen
  8. Obsługuj strumień wejściowy i wyjściowy S
  9. Kontroluj limit czasu i opóźnienie
  10. Przeczytaj wejście strumieniowe

Uruchom proste polecenie systemu Linux

Polecenie „data” służy do wyświetlania aktualnej daty i godziny systemowej. Utwórz plik Pythona za pomocą następującego skryptu, który utworzy podproces wykonujący polecenie „data” i wydrukuj dane wyjściowe tego polecenia:

#Importuj moduł

import podproces

#Zdefiniuj polecenie dla podprocesu i

#otwórz proces za pomocą funkcji Popen().

wyjście = podproces . Popen ( [ 'data' ] , standardowe wyjście = podproces . RURA )

#Pobierz dane wyjściowe i błąd, komunikując się z procesem

standardowe wyjście , stderr = wyjście. komunikować się ( )

#Wydrukuj wynik

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

Wyjście:







Po wykonaniu poprzedniego skryptu pojawiają się następujące dane wyjściowe:



  p1



Idź na górę





Uruchom polecenie z danymi wejściowymi

Polecenie „wc” z opcją „-c” służy do zliczania całkowitej liczby znaków wartości ciągu dostarczonej z tym poleceniem. Utwórz plik w języku Python za pomocą poniższego skryptu, który utworzy podproces z funkcją Popen() w celu uruchomienia poleceń „wc –c”. Wartość ciągu jest pobierana z terminala po wykonaniu skryptu, a na wyjściu wyświetlana jest całkowita liczba znaków ciągu wejściowego.

#Importuj moduł

import podproces

#Zdefiniuj polecenie dla podprocesu i

#Otwórz proces za pomocą funkcji Popen().

wyjście = podproces . Popen ( [ 'toaleta' , '-C' ] , standardowe wyjście = podproces . RURA )

#Pobierz dane wyjściowe i błąd, komunikując się z procesem

standardowe wyjście , stderr = wyjście. komunikować się ( )

#Wydrukuj wynik

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

Wyjście:



Dla wartości wejściowej „Przykłady podprocesu Pythona” pojawiają się następujące dane wyjściowe:

Idź na górę

Uruchom skrypt Pythona

Utwórz plik Pythona o nazwie „sum.py” za pomocą następującego skryptu, który oblicza sumę dwóch liczb, a liczby te są podawane jako argumenty wiersza poleceń:

suma.py

#Importuj niezbędny moduł

import sys

#Policz wszystkie argumenty

N = tylko ( sys . argumentacja )

#Dodaj pierwsze dwie wartości argumentów

suma = wew ( sys . argumentacja [ 1 ] ) + wew ( sys . argumentacja [ 2 ] )

#Wydrukuj wynik dodawania

wydrukować ( 'Suma ' + sys . argumentacja [ 1 ] + ' I ' + sys . argumentacja [ 2 ] + ' Jest' , suma )

Utwórz Pythona plik z następujący skrypt, który uruchomi Pythona plik o imieniu suma . py z dwa argumenty, tworząc a podproces .

#Importuj moduł

import podproces

#Uruchom skrypt Pythona w podprocesie i

#otwórz proces za pomocą funkcji Popen().

wyjście = podproces . Popen ( [ „python3” , 'suma.py' , „25” , „55” ] , standardowe wyjście = podproces . RURA ) #Pobierz dane wyjściowe i błąd, komunikując się z procesem

standardowe wyjście , stderr = wyjście. komunikować się ( )

#Wydrukuj wynik

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

Wyjście:

Po wykonaniu poprzedniego skryptu pojawiają się następujące dane wyjściowe:

Idź na górę

`

Obsłuż błąd podprocesu

Utwórz plik Pythona z następującym skryptem, który obsługuje błędy podprocesu za pomocą bloku „try-except”. Polecenie jest pobierane od użytkownika i wykonywane przez podproces. Komunikat o błędzie jest wyświetlany, jeśli użytkownik otrzyma nieprawidłowe polecenie.

#Importuj moduły

import podproces

import sys

#Odbierz polecenie od użytkownika

Komenda = wejście ( „Wprowadź prawidłowe polecenie:” )

próbować :

#Otwórz proces za pomocą funkcji Popen().

wyjście = podproces . Popen ( [ Komenda ] , standardowe wyjście = podproces . RURA )

#Pobierz dane wyjściowe i błąd, komunikując się z procesem

standardowe wyjście , stderr = wyjście. komunikować się ( )

#Wydrukuj wynik

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

z wyjątkiem :

wydrukować ( 'Błąd:' , sys . ex_info ( ) )

Wyjście:

Jeśli jako dane wejściowe, które są prawidłowym poleceniem, zostanie przyjęte polecenie „pwd”:

  p4-1

Poniższe dane wyjściowe pojawiają się, jeśli polecenie „usr” zostanie przyjęte jako dane wejściowe, które są prawidłowym poleceniem:

  p4-2

Idź na górę

Zwróć kod Subprocess.Popen

Utwórz plik Pythona za pomocą poniższego skryptu, który wykona polecenie „ls” w podprocesie, aby uzyskać listę wszystkich plików Pythona z bieżącej lokalizacji. Skrypt czeka na zakończenie podprocesu i wypisuje kod powrotu.

#Importuj moduły

import podproces

import sys

#Ustaw polecenie

Komenda = [ „jest” , „-l” , „*.py” ]

próbować :

#Otwórz proces za pomocą funkcji Popen().

wyjście = podproces . Popen ( Komenda , standardowe wyjście = podproces . RURA ,

stderr = podproces . RURA , tekst = PRAWDA )

#Poczekaj na zakończenie procesu

kod ret = wyjście. Czekać ( )

#Wydrukuj kod zwrotny

wydrukować ( 'Kod powrotu:' , kod ret )

z wyjątkiem :

#Wydrukuj komunikat o błędzie dla błędnego

wydrukować ( 'Błąd:' , sys . ex_info ( ) )

Wyjście:

Podobny wynik pojawia się po wykonaniu poprzedniego skryptu:

Idź na górę

Przekieruj wyjście podprocesu do pliku

Utwórz plik w języku Python za pomocą następującego skryptu, który zapisuje dane wyjściowe podprocesu w pliku tekstowym. Polecenie wykonywane przez podproces jest pobierane od użytkownika.

#Importuj moduł

import podproces

#Określ nazwę pliku

Nazwa pliku = „plik wyjściowy.txt”

#Wybierz polecenie ping

cmd = wejście ( „Wprowadź polecenie ping:” )

#Podziel pobrane dane wejściowe na podstawie spacji

argumenty = cmd . podział ( )

#Zapisz wynik polecenia w pliku

z otwarty ( Nazwa pliku , 'w' ) Jak nieaktualne dane:

proces = podproces . Popen ( argumenty , standardowe wyjście = nieaktualne dane )

#Poczekaj na zakończenie procesu

kod powrotu = proces. Czekać ( )

Wyjście:

Zgodnie z następującymi danymi wyjściowymi, polecenie „ping -c 3 www.google.com ” pobierane jest od użytkownika, a polecenie „cat” służy do wyświetlenia zawartości pliku zapisywanego przez podproces:

Idź na górę

Przetwarzanie wieloprocesowe przy użyciu Subprocess.Popen

Utwórz plik Pythona z następującym skryptem, w którym pokazano użycie przetwarzania wieloprocesowego za pomocą podprocesu. W tym przypadku funkcja o nazwie display_msg() jest wywoływana wielokrotnie przy użyciu przetwarzania wieloprocesowego.

#Importuj niezbędne moduły

import wieloprocesorowość

import podproces

#Zdefiniuj funkcję, która będzie wywoływana podczas przetwarzania wieloprocesowego

def display_msg ( N ) :

#Zdefiniuj polecenie za pomocą funkcji format().

cmd = „echo «Programowanie w Pythonie»” . format ( N )

#Otwórz proces za pomocą funkcji Popen().

proces = podproces . Popen ( cmd , powłoka = PRAWDA , standardowe wyjście = podproces . RURA )

#Pobierz dane wyjściowe i błąd, komunikując się z procesem

standardowe wyjście , błąd = proces. komunikować się ( )

#Wydrukuj wynik

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

#Wywołaj funkcję 5 razy, tworząc multiprocessing.Pool

z wieloprocesorowość. Basen ( wieloprocesorowość. liczba_procesorów ( ) ) Jak poseł:

#Mapuj funkcję

poseł. mapa ( display_msg , zakres ( 1 , 5 ) )

Wyjście:

Po wykonaniu poprzedniego skryptu pojawiają się następujące dane wyjściowe:

Idź na górę

Obsługuj strumienie wejściowe i wyjściowe

Przed utworzeniem skryptu Pythona w tym przykładzie utwórz plik tekstowy o nazwie „test.txt” z następującą zawartością.

test.txt

PERŁ

pyton

grzmotnąć

php

Utwórz plik w języku Python za pomocą poniższego skryptu, który używa jednego podprocesu do odczytania zawartości pliku „test.txt” i drugiego podprocesu do wyszukiwania określonego słowa w tym pliku tekstowym. W tym przypadku słowo „python” jest wyszukiwane w „pliku test.txt”, który zawiera to słowo.

#Importuj moduły

import podproces

#Zdefiniuj proces dla strumienia wejściowego

w trakcie = podproces . Popen ( [ 'kot' , „test.txt” ] , standardowe wyjście = podproces . RURA , tekst = Tru > #Zdefiniuj proces dla strumienia wyjściowego

proces_wyjściowy = podproces . Popen (

[ 'chwyt' , 'pyton' ] , stdin = w trakcie. standardowe wyjście ,

standardowe wyjście = podproces . RURA , tekst = PRAWDA )

#Przechowuj dane wyjściowe procesów wejściowych i wyjściowych

wyjście , _ = out_process. komunikować się ( )

#Wydrukuj wynik

wydrukować ( 'Wyjście:' , wyjście )

Wyjście:

Po wykonaniu skryptu pojawiają się następujące dane wyjściowe:

Idź na górę

Kontroluj podproces za pomocą timera

Utwórz plik w języku Python za pomocą następującego skryptu, który używa licznika czasu do wykonania polecenia za pomocą podprocesu. Tutaj blok „try-except” służy do uruchomienia licznika czasu, a blok „w końcu” służy do anulowania licznika czasu.

#Importuj moduł podprocesu

import podproces

#Importuj moduł Timera

z gwintowanie import Regulator czasowy

#Zdefiniuj polecenie

cmd = [ 'świst' , „www.example.com” ]

#Otwórz proces

P = podproces . Popen (

cmd , standardowe wyjście = podproces . RURA , stderr = podproces . RURA )

#Zdefiniuj timer

regulator czasowy = Regulator czasowy ( 2 , lambda proces: proces. zabić ( ) , [ P ] )

próbować :

#Uruchom minutnik

regulator czasowy. początek ( )

#Przeczytaj dane wyjściowe

standardowe wyjście , _ = P. komunikować się ( )

#Wydruk wydruku

wydrukować ( standardowe wyjście. rozszyfrować ( ) )

z wyjątkiem :

#Wydrukuj komunikat o błędzie dla błędnego

wydrukować ( 'Błąd:' , sys . ex_info ( ) )

Wreszcie :

#Zatrzymaj minutnik

regulator czasowy. anulować ( )

Wyjście:

Po wykonaniu skryptu pojawiają się następujące dane wyjściowe:

Idź na górę

Przeczytaj wejście strumieniowe

Utwórz plik Pythona, który odczytuje zawartość wyniku podprocesu za pomocą pętli „while” i zapisuje zawartość w zmiennej. Zawartość tej zmiennej jest drukowana później. Tutaj polecenie „curl” jest używane w podprocesie dla www.google.com Adres URL.

#Importuj moduł

import podproces

Polecenie #Zdefiniuj

cmd = [ 'kędzior' , „www.example.com” ]

P = podproces . Popen ( cmd , standardowe wyjście = podproces . RURA ,

stderr = podproces . RURA , tekst = PRAWDA >

#Zainicjuj zmienną wyjściową

wyjście = „”

chwila PRAWDA :

#Przeczytaj wynik procesu linia po linii

ln = P. standardowe wyjście . Czytaj linię ( )

#Zakończ pętlę po zakończeniu podprocesu

Jeśli nie w:

przerwa

wyjście = wyjście + ln

#Wydrukuj linię

wydrukować ( wyjście )

#Uzyskaj kod zwrotny po zakończeniu procesu

kod powrotu = P. Czekać ( )

#Wydrukuj kod zwrotny

wydrukować ( 'Kod powrotu: ' , kod powrotu )

Wyjście:

Ostatnią część trzech wyjść pokazano na poniższym obrazku. Kod powrotu po zakończeniu podprocesu to 0:

Idź na górę

Wniosek

W tym samouczku pokazano różne zastosowania podprocesu Pythona.Popen() przy użyciu wielu skryptów Pythona, które pomogą użytkownikom Pythona poznać podstawowe zastosowania tej funkcji.