Metoden för att fånga och logga kommandofel beror starkt på operativsystemet och skalet du använder. Här är exempel för några vanliga scenarier:
1. Bash (Linux/macOS):
Detta tillvägagångssätt använder BASHs inbyggda felhantering och omdirigering:
`` `bash
#!/bin/bash
Kommando att utföra. Byt ut med ditt faktiska kommando.
command_to_execute ="vissa_invalid_command arg1 arg2"
Utför kommandot och omdirigera stderr till en loggfil. 2> &1 omdirigerar både stderr och stdout.
$ command_to_execute 2> &1> felLog.txt
Kontrollera utgångsstatusen. En utgångsstatus som inte är noll indikerar ett fel.
Om [$? -ne 0]; sedan
echo "kommando '$ command_to_execute' misslyckades. Se fellog.txt för mer information."> &2
fi
`` `
* `2> &1`:Detta omdirigerar standardfel (stderr, filbeskrivning 2) till standardutdata (stdout, filbeskrivning 1). Detta säkerställer både felmeddelanden och eventuell utgång från kommandot fångas i `fellog.txt`.
* `> ERRORLOG.TXT`:Detta omdirigerar stdout (som nu också inkluderar stderr) till filen" fellog.txt ". Allt befintligt innehåll i filen kommer att skrivas över. För att lägga till istället för överskrivning, använd `>> fellog.txt`.
* `$? ':Denna variabel har utgångsstatusen för det senast körda kommandot. 0 indikerar framgång, medan något annat värde indikerar misslyckande.
2. PowerShell (Windows):
PowerShell erbjuder mer sofistikerad felhantering:
`` `PowerShell
Kommando att utföra. Byt ut med ditt faktiska kommando.
$ command ="Some_Invalid_Command Arg1 Arg2"
försök {
&$ kommando
}
fånga {
# Skriv felmeddelandet till loggfilen.
$ _. Undantag.Message | Out -file -filepath "fellog.txt" -append
Skriv-fel "Kommando '$ kommando' misslyckades. Se felLog.txt för detaljer."
}
`` `
* `Försök ... Catch ':Detta block hanterar potentiella undantag under kommandoutförande.
* `$ _. Undantag.Message`:Detta extraherar felmeddelandet från undantagsobjektet.
* `Out -file -filepath" fellog.txt "-append`:Detta lägger till felmeddelandet till filen" fellog.txt ".
3. Python (tvärplattform):
Python möjliggör mer programmatisk kontroll och är plattformsoberoende:
`` `python
importunderprocess
importsys
kommando =["någon_invalid_command", "arg1", "arg2"]
försök:
resultat =delprocess.run (kommando, stderr =delprocess.pipe, text =true, check =true)
#Om framgångsrikt, result.stderr kommer att vara tomt.
utom delprocess.kallad ProcessError som E:
med öppen ("fellog.txt", "a") som f:
f.write (f "kommando '{Kommando}' misslyckades med returkod {E.ReturnCode}:\ n")
f.write (e.stderr + "\ n")
utskrift (f "kommando '{kommando}' misslyckades. Se felLog.txt för detaljer.", File =sys.stderr)
Förutom filenotfounderror:
med öppen ("fellog.txt", "a") som f:
f.write (f "kommando '{kommando}' inte hittad. \ n")
utskrift (f "kommando '{kommando}' inte hittad. Se fellog.txt för detaljer.", File =sys.stderr)
`` `
* `Subprocess.run`:Detta kör kommandot.
* `STDERR =SUBPROCESS.PIPE`:CAPTURES STDERR.
* `Text =True`:Säkerställer att utgången avkodas som text.
* `check =true`:höjer ett undantag om kommandot returnerar en exit-kod utan noll.
* `FileNotFoundError` hanteras uttryckligen för att hantera kommandon som inte finns.
Kom ihåg att ersätta `" Some_Invalid_Command Arg1 Arg2 "` med ditt faktiska kommando. Exemplen använder `fellog.txt`, men du kan välja vilket filnamn du föredrar. Överväg alltid lämplig felhantering för att förhindra att ditt skript kraschar oväntat. Pythonexemplet visar robust felhantering; Det rekommenderas att anta ett liknande tillvägagångssätt för mer komplexa scenarier.