Jak spouštět externí příkazy v Pythonu

Python subprocess

Spouštění systémových příkazů z Pythonu

Python poskytuje výkonné možnosti pro spouštění externích programů a systémových příkazů přímo z vašich skriptů. Tato funkce vám umožňuje využít jednoduchost Pythonu a zároveň využívat obrovské množství nástrojů dostupných ve vašem operačním systému.

Ať už automatizujete opakující se úkoly nebo integrujete složité pracovní postupy, pochopení toho, jak volat systémové příkazy v Pythonu, může výrazně zvýšit vaši produktivitu. V této příručce prozkoumáme různé metody, jak toho efektivně dosáhnout.

Příkaz Popis
subprocess.run Provede příkaz v podshellu. Dokáže zachytit výstup a chyby.
subprocess.run([...], capture_output=True) Zachycuje standardní výstup a standardní chybu prováděného příkazu.
subprocess.run([...], shell=True) Spustí příkaz přes shell a umožní funkce shellu, jako jsou zástupné znaky.
subprocess.Popen Provede příkaz v novém procesu a poskytuje větší kontrolu nad jeho prováděním.
process.stdout.readline() Přečte řádek výstupu ze standardního výstupu procesu.
os.system Provádí příkaz v podshellu, běžně používaném pro jednoduché provádění příkazů.
subprocess.check_output Spustí příkaz a vrátí jeho výstup. Vyvolá výjimku, pokud příkaz selže.
os.environ.copy() Vytvoří kopii aktuálních proměnných prostředí, což umožňuje úpravy.
env parameter in subprocess.run Určuje proměnné prostředí pro nový proces.

Pochopení spouštění skriptů v Pythonu

Poskytnuté skripty demonstrují různé způsoby provádění externích příkazů pomocí Pythonu. The je univerzální a umožňuje spouštět příkazy shellu přímo z vašeho skriptu Python. Například, vytiskne zprávu do konzole, zatímco zachycuje výstup ls -l příkaz, který zobrazí podrobný výpis adresáře. Použitím s umožňuje použití funkcí shellu, jako je rozšíření zástupných znaků, což je užitečné pro složitější příkazy.

The poskytuje větší kontrolu nad prováděním příkazů tím, že umožňuje asynchronní spouštění příkazů a interakci se vstupními a výstupními proudy procesu. Například příklad skriptu s nepřetržitě pinguje místní počítač a čte každý řádek výstupu. Dodatečně, se používá pro jednoduché provádění příkazů, ale postrádá flexibilitu subprocess. Proměnné prostředí lze upravit a předat podprocesu pomocí a parametr v , umožňující dynamické provádění příkazů na základě prostředí.

Provádění externích příkazů v Pythonu

Použití modulu podprocesů Pythonu

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())

Automatizace systémových úloh pomocí Pythonu

Použití os.system a subprocess modulů

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())

Pokročilé techniky pro provádění systémových příkazů

Dalším aspektem provádění systémových příkazů v Pythonu je použití modul pro zpracování analýzy příkazů shellu. Tento modul poskytuje způsob, jak rozdělit příkazy shellu do formátu seznamu, který pak lze předat funkcí. To zajišťuje správné zpracování argumentů s mezerami. Kromě toho můžete použít směrovat standardní vstupní, výstupní a chybové proudy do nadřazeného procesu, což umožňuje složitější komunikaci mezi procesy.

Například řetězení příkazů a postupné zpracování jejich výstupu lze dosáhnout propojením výstupu jednoho příkazu do druhého pomocí . To vám umožňuje vytvářet výkonné sekvence příkazů podobné tomu, co byste dělali ve skriptu shellu. Můžete také použít spouštět více příkazů podprocesů současně, čímž se zvyšuje efektivita vašeho skriptu, zejména při řešení úloh vázaných na I/O.

  1. Jak mohu spustit příkaz shellu a získat jeho výstup v Pythonu?
  2. Použití s k zachycení výstupu příkazu.
  3. Jaký je rozdíl mezi a ?
  4. je jednodušší rozhraní, které čeká na dokončení příkazu, zatímco poskytuje větší kontrolu nad prováděním příkazů a umožňuje asynchronní provoz.
  5. Jak se vypořádám s chybami při spuštění příkazu systému?
  6. Použití a bloky s zachytit a řešit chyby.
  7. Mohu předat proměnné prostředí příkazu?
  8. Ano, použijte parametr v nebo předat proměnné prostředí.
  9. Jak spustím více příkazů za sebou?
  10. Použití nebo ve smyčce nebo řetězu příkazy pomocí potrubí s .
  11. Jak mohu provést příkaz, který vyžaduje vstup uživatele?
  12. Použití s a komunikovat s procesem pomocí .
  13. Jaké je použití při provádění příkazu?
  14. pomáhá správně analyzovat příkazy shellu a zajišťuje správné zpracování argumentů s mezerami.
  15. Jak spustím příkaz na pozadí?
  16. Použití bez čekání na dokončení procesu nebo na použití ke správě provádění na pozadí.

Pokročilé techniky pro provádění systémových příkazů

Dalším aspektem provádění systémových příkazů v Pythonu je použití modul pro zpracování analýzy příkazů shellu. Tento modul poskytuje způsob, jak rozdělit příkazy shellu do formátu seznamu, který pak lze předat funkcí. To zajišťuje správné zpracování argumentů s mezerami. Kromě toho můžete použít směrovat standardní vstupní, výstupní a chybové proudy do nadřazeného procesu, což umožňuje složitější komunikaci mezi procesy.

Například řetězení příkazů a následné zpracování jejich výstupu lze dosáhnout propojením výstupu jednoho příkazu do druhého pomocí . To vám umožňuje vytvářet výkonné sekvence příkazů podobné tomu, co byste dělali ve skriptu shellu. Můžete také použít spouštět více příkazů podprocesů současně, čímž se zvyšuje efektivita vašeho skriptu, zejména při řešení úloh vázaných na I/O.

Provádění externích příkazů v Pythonu je všestranná a výkonná funkce, která může výrazně zlepšit vaše skriptovací a automatizační úlohy. Pomocí modulu, můžete spouštět příkazy shellu, zachycovat jejich výstupy a efektivně řešit chyby. The Funkce poskytuje jednodušší alternativu pro provádění základních příkazů. Navíc začlenění modul zajišťuje správnou analýzu složitých příkazů shellu. Pochopení těchto technik vám umožní využít silné stránky Pythonu a zároveň využít plný potenciál nástrojů příkazového řádku vašeho operačního systému.