Externe opdrachten uitvoeren in Python

Python subprocess

Systeemopdrachten uitvoeren vanuit Python

Python biedt krachtige mogelijkheden voor het rechtstreeks vanuit uw scripts uitvoeren van externe programma's en systeemopdrachten. Met deze functie kunt u de eenvoud van Python benutten en tegelijkertijd profiteren van de enorme hoeveelheid tools die beschikbaar zijn in uw besturingssysteem.

Of u nu repetitieve taken automatiseert of complexe workflows integreert, als u begrijpt hoe u systeemopdrachten in Python moet aanroepen, kunt u uw productiviteit aanzienlijk verhogen. In deze handleiding verkennen we verschillende methoden om dit effectief te bereiken.

Commando Beschrijving
subprocess.run Voert een opdracht uit in een subshell. Kan uitvoer en fouten vastleggen.
subprocess.run([...], capture_output=True) Legt de standaarduitvoer en standaardfout van de uitgevoerde opdracht vast.
subprocess.run([...], shell=True) Voert de opdracht uit via de shell, waardoor shell-functies zoals jokertekens mogelijk zijn.
subprocess.Popen Voert een opdracht uit in een nieuw proces, waardoor er meer controle ontstaat over de uitvoering ervan.
process.stdout.readline() Leest een regel uitvoer uit de standaarduitvoer van het proces.
os.system Voert een opdracht uit in een subshell, vaak gebruikt voor eenvoudige uitvoering van opdrachten.
subprocess.check_output Voert een opdracht uit en retourneert de uitvoer ervan. Creëert een uitzondering als de opdracht mislukt.
os.environ.copy() Creëert een kopie van de huidige omgevingsvariabelen, waardoor wijzigingen mogelijk zijn.
env parameter in subprocess.run Specificeert omgevingsvariabelen voor het nieuwe proces.

Scriptuitvoering in Python begrijpen

De meegeleverde scripts demonstreren verschillende manieren om externe opdrachten uit te voeren met Python. De command is veelzijdig, waardoor u shell-opdrachten rechtstreeks vanuit uw Python-script kunt uitvoeren. Bijvoorbeeld, drukt een bericht af naar de console, terwijl vangt de uitvoer van de ls -l opdracht, waarbij een gedetailleerde directorylijst wordt weergegeven. Gebruik makend van met maakt het gebruik van shell-functies mogelijk, zoals uitbreiding van jokertekens, waardoor het handig is voor complexere opdrachten.

De command biedt meer controle over de uitvoering van opdrachten door asynchrone uitvoering van opdrachten en interactie met de invoer- en uitvoerstromen van het proces mogelijk te maken. Bijvoorbeeld het scriptvoorbeeld met pingt voortdurend de lokale machine en leest elke uitvoerregel. Aanvullend, wordt gebruikt voor eenvoudige opdrachtuitvoering, maar mist de flexibiliteit van subprocess. Omgevingsvariabelen kunnen worden gewijzigd en doorgegeven aan het subproces met behulp van en de parameter in , waardoor dynamische opdrachtuitvoering mogelijk is op basis van de omgeving.

Externe opdrachten uitvoeren in Python

Met behulp van de subprocesmodule van Python

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

Systeemtaken automatiseren met Python

Met behulp van os.system- en subprocess-modules

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

Geavanceerde technieken voor het uitvoeren van systeemopdrachten

Een ander aspect van het uitvoeren van systeemopdrachten in Python is het gebruik van de module om het parseren van shell-opdrachten af ​​te handelen. Deze module biedt een manier om shell-opdrachten op te splitsen in een lijstindeling, waaraan vervolgens kan worden doorgegeven functies. Dit zorgt ervoor dat argumenten met spaties correct worden afgehandeld. Daarnaast kunt u gebruik maken van de om de standaardinvoer-, uitvoer- en foutstromen naar het bovenliggende proces te leiden, waardoor complexere communicatie tussen processen mogelijk wordt.

Het aan elkaar koppelen van commando's en het opeenvolgend verwerken van de uitvoer ervan kan bijvoorbeeld worden bereikt door de uitvoer van het ene commando naar het andere te leiden met behulp van . Hierdoor kunt u krachtige opdrachtreeksen maken, vergelijkbaar met wat u in een shellscript zou doen. Je kan ook gebruiken om meerdere subprocesopdrachten gelijktijdig uit te voeren, waardoor de efficiëntie van uw script wordt verbeterd, vooral bij het omgaan met I/O-gebonden taken.

  1. Hoe kan ik een shell-opdracht uitvoeren en de uitvoer ervan in Python krijgen?
  2. Gebruik met om de uitvoer van de opdracht vast te leggen.
  3. Wat is het verschil tussen En ?
  4. is een eenvoudiger interface die wacht tot de opdracht is voltooid, terwijl geeft meer controle over de uitvoering van opdrachten, waardoor asynchrone werking mogelijk is.
  5. Hoe ga ik om met fouten bij het uitvoeren van een systeemopdracht?
  6. Gebruik En blokken mee fouten op te sporen en af ​​te handelen.
  7. Kan ik omgevingsvariabelen doorgeven aan een opdracht?
  8. Ja, gebruik de parameter in of omgevingsvariabelen doorgeven.
  9. Hoe voer ik meerdere opdrachten achter elkaar uit?
  10. Gebruik of in een lus of kettingopdrachten met behulp van pijpen met .
  11. Hoe kan ik een opdracht uitvoeren waarvoor gebruikersinvoer vereist is?
  12. Gebruik met en communiceer met het proces via .
  13. Wat is het gebruik van bij de uitvoering van commando's?
  14. helpt bij het correct parseren van shell-opdrachten, waardoor argumenten met spaties correct worden afgehandeld.
  15. Hoe voer ik een opdracht uit op de achtergrond?
  16. Gebruik zonder te wachten tot het proces is voltooid of te gebruiken om de uitvoering op de achtergrond te beheren.

Geavanceerde technieken voor het uitvoeren van systeemopdrachten

Een ander aspect van het uitvoeren van systeemopdrachten in Python is het gebruik van de module om het parseren van shell-opdrachten af ​​te handelen. Deze module biedt een manier om shell-opdrachten op te splitsen in een lijstindeling, waaraan vervolgens kan worden doorgegeven functies. Dit zorgt ervoor dat argumenten met spaties correct worden afgehandeld. Daarnaast kunt u gebruik maken van de om de standaardinvoer-, uitvoer- en foutstromen naar het bovenliggende proces te leiden, waardoor complexere communicatie tussen processen mogelijk wordt.

Het aan elkaar koppelen van commando's en het opeenvolgend verwerken van de uitvoer ervan kan bijvoorbeeld worden bereikt door de uitvoer van het ene commando naar het andere te leiden met behulp van . Hierdoor kunt u krachtige opdrachtreeksen maken, vergelijkbaar met wat u in een shellscript zou doen. Je kan ook gebruiken om meerdere subprocesopdrachten gelijktijdig uit te voeren, waardoor de efficiëntie van uw script wordt verbeterd, vooral bij het omgaan met I/O-gebonden taken.

Het uitvoeren van externe opdrachten in Python is een veelzijdige en krachtige mogelijkheid die uw script- en automatiseringstaken aanzienlijk kan verbeteren. Door gebruik te maken van de module kunt u shell-opdrachten uitvoeren, de uitvoer ervan vastleggen en fouten effectief afhandelen. De functie biedt een eenvoudiger alternatief voor de uitvoering van basisopdrachten. Bovendien is het opnemen van de module zorgt voor een goede parsering van complexe shell-opdrachten. Als u deze technieken begrijpt, kunt u de sterke punten van Python benutten en tegelijkertijd het volledige potentieel van de opdrachtregelprogramma's van uw besturingssysteem benutten.