Temat treści:
- Uruchom proste polecenie systemu Linux
- Uruchom polecenie z danymi wejściowymi
- Uruchom skrypt Pythona
- Obsłuż błąd podprocesu
- Zwróć kod Subprocess.Popen
- Przekieruj wyjście podprocesu do pliku
- Przetwarzanie wieloprocesowe przy użyciu Subprocess.Popen
- Obsługuj strumień wejściowy i wyjściowy S
- Kontroluj limit czasu i opóźnienie
- 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:
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:
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:
`
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łyimport 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”:
Poniższe dane wyjściowe pojawiają się, jeśli polecenie „usr” zostanie przyjęte jako dane wejściowe, które są prawidłowym poleceniem:
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łyimport 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:
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:
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łyimport 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:
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łyimport 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:
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ł podprocesuimport 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:
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:
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.