De methode voor het vastleggen en vastleggen van opdrachtfouten is sterk afhankelijk van het besturingssysteem en de shell die u gebruikt. Hier volgen voorbeelden van enkele veelvoorkomende scenario's:
1. Bash (Linux/macOS):
Deze aanpak maakt gebruik van de ingebouwde foutafhandeling en omleiding van bash:
``` bash
#!/bin/bash
Opdracht om uit te voeren. Vervang door uw daadwerkelijke opdracht.
command_to_execute="een_ongeldig_commando arg1 arg2"
Voer de opdracht uit en stuur stderr door naar een logbestand. 2>&1 leidt zowel stderr als stdout om.
$command_to_execute 2>&1> errorlog.txt
Controleer de afsluitstatus. Een afsluitstatus die niet nul is, duidt op een fout.
als [$? -ne 0]; Dan
echo "Opdracht '$command_to_execute' mislukt. Zie errorlog.txt voor details.">&2
fi
```
* `2>&1`:Dit leidt de standaardfout (stderr, bestandsdescriptor 2) om naar standaarduitvoer (stdout, bestandsdescriptor 1). Dit zorgt ervoor dat zowel foutmeldingen als alle uitvoer van de opdracht worden vastgelegd in `errorlog.txt`.
* `> errorlog.txt`:Dit leidt stdout (dat nu ook stderr bevat) om naar het bestand `errorlog.txt`. Eventuele bestaande inhoud in het bestand wordt overschreven. Om toe te voegen in plaats van te overschrijven, gebruik `>> errorlog.txt`.
* `$?`:Deze variabele bevat de afsluitstatus van het meest recent uitgevoerde commando. 0 duidt op succes, terwijl elke andere waarde op mislukking duidt.
2. PowerShell (Windows):
PowerShell biedt geavanceerdere foutafhandeling:
```powershell
Opdracht om uit te voeren. Vervang door uw daadwerkelijke opdracht.
$command ="een_invalid_command arg1 arg2"
poging {
&$opdracht
}
vangst {
# Schrijf de foutmelding naar het logbestand.
$_.Uitzondering.Bericht | Out-File -Bestandspad "errorlog.txt" -Toevoegen
Schrijffout "Opdracht '$command' mislukt. Zie errorlog.txt voor details."
}
```
* `try...catch`:Dit blok handelt potentiële uitzonderingen af tijdens de uitvoering van opdrachten.
* `$_.Exception.Message`:Dit extraheert het foutbericht uit het uitzonderingsobject.
* `Out-File -FilePath "errorlog.txt" -Append`:Dit voegt de foutmelding toe aan het `errorlog.txt` bestand.
3. Python (platformoverschrijdend):
Python maakt meer programmatische controle mogelijk en is platformonafhankelijk:
```python
subproces importeren
importsysteem
command =["een_ongeldig_commando", "arg1", "arg2"]
poging:
resultaat =subprocess.run(opdracht, stderr=subprocess.PIPE, tekst=Waar, check=Waar)
#Als dit lukt, is result.stderr leeg.
behalve subprocess.CalledProcessError als e:
met open("errorlog.txt", "a") als f:
f.write(f"Opdracht '{opdracht}' mislukt met retourcode {e.returncode}:\n")
f.write(e.stderr + "\n")
print(f"Opdracht '{opdracht}' is mislukt. Zie errorlog.txt voor details.", file=sys.stderr)
behalve FileNotFoundError:
met open("errorlog.txt", "a") als f:
f.write(f"Opdracht '{opdracht}' niet gevonden.\n")
print(f"Opdracht '{opdracht}' niet gevonden. Zie errorlog.txt voor details.", file=sys.stderr)
```
* `subprocess.run`:Dit voert het commando uit.
* `stderr=subprocess.PIPE`:Legt stderr vast.
* `text=True`:Zorgt ervoor dat de uitvoer als tekst wordt gedecodeerd.
* `check=True`:genereert een uitzondering als de opdracht een afsluitcode retourneert die niet nul is.
* `FileNotFoundError` wordt expliciet afgehandeld om met niet-bestaande opdrachten om te gaan.
Vergeet niet om `"some_invalid_command arg1 arg2"` te vervangen door uw daadwerkelijke opdracht. De voorbeelden gebruiken `errorlog.txt`, maar u kunt elke gewenste bestandsnaam kiezen. Denk altijd na over de juiste foutafhandeling om te voorkomen dat uw script onverwachts crasht. Het Python-voorbeeld demonstreert een robuuste foutafhandeling; het wordt aanbevolen om een soortgelijke aanpak te hanteren voor complexere scenario's. |