Jak wykonywać polecenia zewnętrzne w Pythonie

Python subprocess

Uruchamianie poleceń systemowych z Pythona

Python zapewnia potężne możliwości wykonywania zewnętrznych programów i poleceń systemowych bezpośrednio ze skryptów. Ta funkcja umożliwia wykorzystanie prostoty języka Python przy jednoczesnym korzystaniu z szerokiej gamy narzędzi dostępnych w systemie operacyjnym.

Niezależnie od tego, czy automatyzujesz powtarzalne zadania, czy integrujesz złożone przepływy pracy, zrozumienie, jak wywoływać polecenia systemowe w Pythonie, może znacząco zwiększyć Twoją produktywność. W tym przewodniku omówimy różne metody skutecznego osiągnięcia tego celu.

Komenda Opis
subprocess.run Wykonuje polecenie w podpowłoce. Potrafi przechwytywać dane wyjściowe i błędy.
subprocess.run([...], capture_output=True) Przechwytuje standardowe wyjście i standardowy błąd wykonanego polecenia.
subprocess.run([...], shell=True) Uruchamia polecenie za pośrednictwem powłoki, umożliwiając korzystanie z funkcji powłoki, takich jak symbole wieloznaczne.
subprocess.Popen Wykonuje polecenie w nowym procesie, zapewniając większą kontrolę nad jego wykonaniem.
process.stdout.readline() Odczytuje linię wyjścia ze standardowego wyjścia procesu.
os.system Wykonuje polecenie w podpowłoce, powszechnie używane do prostego wykonywania poleceń.
subprocess.check_output Uruchamia polecenie i zwraca jego dane wyjściowe. Zgłasza wyjątek, jeśli wykonanie polecenia nie powiedzie się.
os.environ.copy() Tworzy kopię bieżących zmiennych środowiskowych, umożliwiając modyfikacje.
env parameter in subprocess.run Określa zmienne środowiskowe dla nowego procesu.

Zrozumienie wykonywania skryptów w Pythonie

Dostarczone skrypty demonstrują różne sposoby wykonywania poleceń zewnętrznych przy użyciu języka Python. The polecenie jest wszechstronne i pozwala na uruchamianie poleceń powłoki bezpośrednio ze skryptu Pythona. Na przykład, wypisuje wiadomość na konsoli, podczas gdy przechwytuje wyjście ls -l polecenie wyświetlające szczegółową listę katalogów. Za pomocą z umożliwia korzystanie z funkcji powłoki, takich jak rozwijanie symboli wieloznacznych, dzięki czemu jest przydatny w przypadku bardziej złożonych poleceń.

The polecenie zapewnia większą kontrolę nad wykonywaniem poleceń, umożliwiając asynchroniczne uruchamianie poleceń i interakcję ze strumieniami wejściowymi i wyjściowymi procesu. Na przykład przykład skryptu z w sposób ciągły wysyła polecenie ping do komputera lokalnego i odczytuje każdą linię danych wyjściowych. Dodatkowo, służy do prostego wykonywania poleceń, ale brakuje mu elastyczności subprocess. Zmienne środowiskowe można modyfikować i przekazywać do podprocesu za pomocą i parametr w , umożliwiając dynamiczne wykonywanie poleceń w oparciu o środowisko.

Wykonywanie poleceń zewnętrznych w Pythonie

Korzystanie z modułu podprocesu Pythona

import subprocess
# Example 1: Running a simple shell command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

Automatyzacja zadań systemowych za pomocą Pythona

Korzystanie z modułów os.system i subprocess

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('An error occurred:', e.output.decode())

Zaawansowane techniki wykonywania poleceń systemowych

Innym aspektem wykonywania poleceń systemowych w Pythonie jest użycie moduł do obsługi analizowania poleceń powłoki. Moduł ten umożliwia podzielenie poleceń powłoki na format listy, który można następnie przekazać Funkcje. Dzięki temu argumenty zawierające spacje będą obsługiwane poprawnie. Dodatkowo możesz skorzystać z do kierowania standardowych strumieni wejściowych, wyjściowych i błędów do procesu nadrzędnego, umożliwiając bardziej złożoną komunikację między procesami.

Na przykład łączenie poleceń w łańcuch i przetwarzanie ich wyników sekwencyjnie można osiągnąć poprzez przesyłanie danych wyjściowych jednego polecenia do drugiego za pomocą . Pozwala to na tworzenie potężnych sekwencji poleceń podobnych do tych, które można wykonać w skrypcie powłoki. Możesz także użyć do jednoczesnego uruchamiania wielu poleceń podprocesów, co zwiększa wydajność skryptu, szczególnie w przypadku zadań związanych z we/wy.

  1. Jak mogę uruchomić polecenie powłoki i uzyskać jego dane wyjściowe w Pythonie?
  2. Używać z aby przechwycić dane wyjściowe polecenia.
  3. Jaka jest różnica pomiędzy I ?
  4. to prostszy interfejs, który czeka na zakończenie polecenia, podczas gdy daje większą kontrolę nad wykonywaniem poleceń, umożliwiając działanie asynchroniczne.
  5. Jak radzić sobie z błędami podczas uruchamiania polecenia systemowego?
  6. Używać I bloki z do wychwytywania i obsługi błędów.
  7. Czy mogę przekazać zmienne środowiskowe do polecenia?
  8. Tak, użyj parametr w Lub do przekazywania zmiennych środowiskowych.
  9. Jak uruchomić wiele poleceń po kolei?
  10. Używać Lub w poleceniach pętli lub łańcucha przy użyciu potoków with .
  11. Jak mogę wykonać polecenie wymagające wprowadzenia danych przez użytkownika?
  12. Używać z i komunikować się z procesem za pomocą .
  13. Jaki jest użytek w wykonaniu polecenia?
  14. pomaga poprawnie analizować polecenia powłoki, zapewniając prawidłową obsługę argumentów ze spacjami.
  15. Jak uruchomić polecenie w tle?
  16. Używać bez czekania na zakończenie procesu lub użycie do zarządzania wykonywaniem w tle.

Zaawansowane techniki wykonywania poleceń systemowych

Innym aspektem wykonywania poleceń systemowych w Pythonie jest użycie metody moduł do obsługi analizowania poleceń powłoki. Moduł ten umożliwia podzielenie poleceń powłoki na format listy, który można następnie przekazać Funkcje. Dzięki temu argumenty zawierające spacje będą obsługiwane poprawnie. Dodatkowo możesz skorzystać z kierować standardowe strumienie wejściowe, wyjściowe i błędów do procesu nadrzędnego, umożliwiając bardziej złożoną komunikację między procesami.

Na przykład łączenie poleceń w łańcuch i przetwarzanie ich wyników sekwencyjnie można osiągnąć poprzez przesyłanie danych wyjściowych jednego polecenia do drugiego za pomocą . Pozwala to na tworzenie potężnych sekwencji poleceń podobnych do tych, które można wykonać w skrypcie powłoki. Możesz także użyć do jednoczesnego uruchamiania wielu poleceń podprocesów, co zwiększa wydajność skryptu, szczególnie w przypadku zadań związanych z we/wy.

Wykonywanie poleceń zewnętrznych w języku Python to wszechstronna i potężna funkcja, która może znacząco usprawnić wykonywanie zadań związanych ze skryptami i automatyzacją. Korzystając z moduł, możesz uruchamiać polecenia powłoki, przechwytywać ich dane wyjściowe i efektywnie obsługiwać błędy. The Funkcja zapewnia prostszą alternatywę dla podstawowego wykonywania poleceń. Dodatkowo, włączenie moduł zapewnia prawidłowe analizowanie złożonych poleceń powłoki. Zrozumienie tych technik umożliwia wykorzystanie mocnych stron języka Python przy jednoczesnym wykorzystaniu pełnego potencjału narzędzi wiersza poleceń systemu operacyjnego.