Blog JSystems - uwalniamy wiedzę!

Szukaj

Moduł subprocess zastępuje: os.system(), os.spawn*(), commands.*(), os.popen*(), popen2.*() oferując nam wyższym model abstrakcji i większą wygodę wykorzystania. Omówimy tu dwie funkcje, jedna to call, druga Popen. Różnica polega na tym, że pierwsza powoduje wykonanie liniowe wywoływanej komendy w ramach wątku naszej aplikacji, druga generuje osobny proces w systemie operacyjnym.

Funkcja call

Wywołamy ping na Onecie. Argumenty do funkcji call podajemy w postaci listy. Podajemy w niej kolejne komendy i ich parametry. Zasadniczo elementy zostaną rozdzielone spacjami i tak wykonane w systemie:

import subprocess
result=subprocess.call(['ping' ,'-n','10','onet.pl'])
print(f"result={result}")
print('koniec')

Wynik na konsoli:

Funkcja call: Moduł subprocess w Pythonie

Zastanawiać może enigmatyczne „result” odbierane od funcji. Jeśli komenda systemu operacyjnego wykona się z błędem, zostanie zwrócona wartość 1. Jeśli wszystko było ok dostaniemy 0. Wyświetliłem też komunikat „koniec” by zaprezentować liniowe wykonanie. Funkcja ta pozwala jeszcze na ustawienie argumentu shell=True, co spowoduje zaczytywanie zmiennych środowiskowych i generalnie wykonanie za pośrednictwem powłoki.

Funkcja Popen

Wykonam tę samą czynność co w przykładzie funkcją call. Tym razem jednak użyję funkcji Popen powodującej uruchomienie czynności w osobnym procesie systemu operacyjnego:

import subprocess
result=subprocess.Popen(['ping','-n','2','onet.pl'])
print('koniec')
print(result.communicate())

Efekt:

Funkcja Popen: Moduł subprocess w Pythonie

Tym razem komunikat „koniec” wyświetlił się na początku. Widzimy dzięki temu że proces faktycznie rozpoczął się w osobnym procesie.

Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Co zastępuje moduł subprocess w Pythonie?
Moduł subprocess zastępuje starsze mechanizmy uruchamiania poleceń systemowych, takie jak os.system, os.spawn, os.popen czy popen2. Oferuje przy tym wyższy poziom abstrakcji i większą wygodę, dlatego jest zalecanym sposobem wywoływania komend systemu operacyjnego z kodu Pythona.
Czym różni się funkcja call od Popen?
Funkcja call wykonuje polecenie liniowo, w ramach wątku Twojej aplikacji, więc program czeka na jej zakończenie. Popen uruchamia polecenie w osobnym procesie systemu operacyjnego, dzięki czemu kod może działać dalej, nie czekając na zakończenie uruchomionej komendy.
W jakiej postaci podaje się argumenty do funkcji call?
Argumenty podajesz w postaci listy, w której umieszczasz kolejno komendę i jej parametry. Elementy tej listy zostaną rozdzielone spacjami i tak wykonane w systemie. Dzięki temu zapisowi jasno oddzielasz nazwę polecenia od jego kolejnych argumentów.
Co oznacza wartość zwracana przez funkcję call?
Wartość zwracana to kod wyjścia uruchomionego polecenia. Jeśli komenda systemu operacyjnego zakończy się błędem, zwrócona zostanie wartość 1. Jeśli wszystko przebiegło poprawnie, otrzymasz 0. Na tej podstawie możesz sprawdzić, czy uruchomione polecenie zadziałało prawidłowo.
Do czego służy argument shell=True w funkcji call?
Ustawienie argumentu shell na True powoduje wykonanie polecenia za pośrednictwem powłoki systemowej. Dzięki temu zaczytywane są zmienne środowiskowe, a komenda uruchamiana jest tak, jak w zwykłym wierszu poleceń.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...