Ako vykonávať externé príkazy v Pythone

Python subprocess

Spúšťanie systémových príkazov z Pythonu

Python poskytuje výkonné funkcie na vykonávanie externých programov a systémových príkazov priamo z vašich skriptov. Táto funkcia vám umožňuje využiť jednoduchosť Pythonu a zároveň využívať obrovské množstvo nástrojov dostupných vo vašom operačnom systéme.

Či už automatizujete opakujúce sa úlohy alebo integrujete zložité pracovné postupy, pochopenie toho, ako volať systémové príkazy v Pythone, môže výrazne zvýšiť vašu produktivitu. V tejto príručke preskúmame rôzne spôsoby, ako to efektívne dosiahnuť.

Príkaz Popis
subprocess.run Vykoná príkaz v podshell. Dokáže zachytiť výstup a chyby.
subprocess.run([...], capture_output=True) Zachytáva štandardný výstup a štandardnú chybu vykonávaného príkazu.
subprocess.run([...], shell=True) Spustí príkaz cez shell, čo umožní funkcie shellu, ako sú zástupné znaky.
subprocess.Popen Vykoná príkaz v novom procese, čím poskytne väčšiu kontrolu nad jeho vykonaním.
process.stdout.readline() Číta riadok výstupu zo štandardného výstupu procesu.
os.system Vykoná príkaz v podshell, ktorý sa bežne používa na jednoduché vykonávanie príkazov.
subprocess.check_output Spustí príkaz a vráti jeho výstup. Vyvolá výnimku, ak príkaz zlyhá.
os.environ.copy() Vytvorí kópiu aktuálnych premenných prostredia, čo umožňuje úpravy.
env parameter in subprocess.run Určuje premenné prostredia pre nový proces.

Pochopenie vykonávania skriptov v Pythone

Poskytnuté skripty demonštrujú rôzne spôsoby vykonávania externých príkazov pomocou Pythonu. The príkaz je všestranný a umožňuje vám spúšťať príkazy shellu priamo z vášho skriptu Python. napr. vytlačí správu do konzoly, zatiaľ čo zachytáva výstup z ls -l príkaz, ktorý zobrazí podrobný výpis adresára. Použitím s umožňuje použitie funkcií shellu, ako je rozšírenie zástupných znakov, vďaka čomu je vhodný pre zložitejšie príkazy.

The poskytuje väčšiu kontrolu nad vykonávaním príkazov tým, že umožňuje asynchrónne spúšťanie príkazov a interakciu so vstupnými a výstupnými tokmi procesu. Napríklad príklad skriptu s nepretržite pinguje lokálny počítač a číta každý riadok výstupu. okrem toho sa používa na jednoduché vykonávanie príkazov, ale chýba mu flexibilita subprocess. Premenné prostredia je možné upraviť a odovzdať podprocesu pomocou a parameter v , ktorý umožňuje dynamické vykonávanie príkazov na základe prostredia.

Vykonávanie externých príkazov v Pythone

Pomocou modulu podprocesov 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())

Automatizácia systémových úloh pomocou Pythonu

Použitie os.system a subprocess modulov

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 na vykonávanie systémových príkazov

Ďalší aspekt vykonávania systémových príkazov v Pythone zahŕňa použitie modul na spracovanie analýzy príkazov shellu. Tento modul poskytuje spôsob, ako rozdeliť príkazy shellu do formátu zoznamu, ktorý potom možno odovzdať funkcie. To zaisťuje správne spracovanie argumentov s medzerami. Okrem toho môžete použiť smerovať štandardné vstupné, výstupné a chybové prúdy do nadradeného procesu, čo umožňuje komplexnejšiu medziprocesovú komunikáciu.

Napríklad reťazenie príkazov a postupné spracovanie ich výstupu je možné dosiahnuť prepojením výstupu jedného príkazu do druhého pomocou . To vám umožňuje vytvárať výkonné sekvencie príkazov podobné tým, ktoré by ste robili v skripte shellu. Môžete tiež použiť na spustenie viacerých príkazov podprocesu súčasne, čím sa zvýši efektívnosť vášho skriptu, najmä pri riešení úloh viazaných na I/O.

  1. Ako môžem spustiť príkaz shell a získať jeho výstup v Pythone?
  2. Použite s na zachytenie výstupu príkazu.
  3. Aký je rozdiel medzi a ?
  4. je jednoduchšie rozhranie, ktoré čaká na dokončenie príkazu, zatiaľ čo poskytuje väčšiu kontrolu nad vykonávaním príkazov, čo umožňuje asynchrónnu prevádzku.
  5. Ako riešim chyby pri spustení systémového príkazu?
  6. Použite a bloky s zachytiť a zvládnuť chyby.
  7. Môžem odovzdať premenné prostredia príkazu?
  8. Áno, použite parameter v alebo odovzdať premenné prostredia.
  9. Ako spustím viacero príkazov za sebou?
  10. Použite alebo v slučke alebo reťazové príkazy pomocou rúrok s .
  11. Ako môžem vykonať príkaz, ktorý vyžaduje vstup používateľa?
  12. Použite s a komunikovať s procesom pomocou .
  13. Aké je využitie pri vykonávaní príkazov?
  14. pomáha správne analyzovať príkazy shellu, čím zabezpečuje správne spracovanie argumentov s medzerami.
  15. Ako spustím príkaz na pozadí?
  16. Použite bez čakania na dokončenie procesu alebo na použitie na správu vykonávania na pozadí.

Pokročilé techniky na vykonávanie systémových príkazov

Ďalší aspekt vykonávania systémových príkazov v Pythone zahŕňa použitie modul na spracovanie analýzy príkazov shellu. Tento modul poskytuje spôsob, ako rozdeliť príkazy shellu do formátu zoznamu, ktorý potom možno odovzdať funkcie. To zaisťuje správne spracovanie argumentov s medzerami. Okrem toho môžete použiť smerovať štandardné vstupné, výstupné a chybové prúdy do nadradeného procesu, čo umožňuje komplexnejšiu medziprocesovú komunikáciu.

Napríklad reťazenie príkazov a postupné spracovanie ich výstupu je možné dosiahnuť prepojením výstupu jedného príkazu do druhého pomocou . To vám umožňuje vytvárať výkonné sekvencie príkazov podobné tým, ktoré by ste robili v skripte shellu. Môžete tiež použiť na spustenie viacerých príkazov podprocesu súčasne, čím sa zvýši efektívnosť vášho skriptu, najmä pri riešení úloh viazaných na I/O.

Vykonávanie externých príkazov v Pythone je všestranná a výkonná funkcia, ktorá môže výrazne zlepšiť vaše skriptovacie a automatizačné úlohy. Pomocou modul, môžete spúšťať príkazy shellu, zachytávať ich výstupy a efektívne spracovávať chyby. The poskytuje jednoduchšiu alternatívu pre základné vykonávanie príkazov. Okrem toho, začlenenie modul zabezpečuje správnu analýzu zložitých príkazov shellu. Pochopenie týchto techník vám umožní využiť silné stránky Pythonu a zároveň využiť plný potenciál nástrojov príkazového riadka vášho operačného systému.