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.
- Ako môžem spustiť príkaz shell a získať jeho výstup v Pythone?
- Použite s na zachytenie výstupu príkazu.
- Aký je rozdiel medzi a ?
- 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.
- Ako riešim chyby pri spustení systémového príkazu?
- Použite a bloky s zachytiť a zvládnuť chyby.
- Môžem odovzdať premenné prostredia príkazu?
- Áno, použite parameter v alebo odovzdať premenné prostredia.
- Ako spustím viacero príkazov za sebou?
- Použite alebo v slučke alebo reťazové príkazy pomocou rúrok s .
- Ako môžem vykonať príkaz, ktorý vyžaduje vstup používateľa?
- Použite s a komunikovať s procesom pomocou .
- Aké je využitie pri vykonávaní príkazov?
- pomáha správne analyzovať príkazy shellu, čím zabezpečuje správne spracovanie argumentov s medzerami.
- Ako spustím príkaz na pozadí?
- 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.