Ce face exec.Cmd.Output
Output pornește comanda, colectează tot ce scrie pe stdout și îl returnează ca []byte. Este cel mai simplu mod de a folosi rezultatul unei comenzi în program.
Dacă nu ai setat cmd.Stderr și comanda eșuează, mesajele de eroare ale comenzii sunt păstrate în ExitError.Stderr. Pentru stdout și stderr amestecate, folosește CombinedOutput.
Ce returnează
Ieșirea standard a comenzii și nil, sau ce s-a apucat de colectat și o eroare.
Exemple
Exemplul 1: Sortarea unei liste cu sort
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
cmd := exec.Command("sort")
cmd.Stdin = strings.NewReader("Timișoara\nBacău\nIași\nArad\n")
iesire, err := cmd.Output()
if err != nil {
fmt.Println("eroare:", err)
return
}
fmt.Print(string(iesire))
}
Rezultat
Arad
Bacău
Iași
Timișoara
Exemplul 2: Mesajul de eroare al comenzii
package main
import (
"errors"
"fmt"
"os/exec"
)
func main() {
_, err := exec.Command("sh", "-c", "echo 'fișierul de configurare lipsește' >&2; exit 1").Output()
var ee *exec.ExitError
if errors.As(err, &ee) {
fmt.Println("cod:", ee.ExitCode())
fmt.Printf("stderr: %s", ee.Stderr)
}
}
Rezultat
cod: 1
stderr: fișierul de configurare lipsește
Exemplul 3: Prelucrarea rezultatului rând cu rând
package main
import (
"fmt"
"os"
"os/exec"
"strings"
)
func main() {
for _, n := range []string{"factura1.pdf", "factura2.pdf", "nota.txt"} {
os.WriteFile(n, nil, 0o644)
}
iesire, err := exec.Command("ls").Output()
if err != nil {
fmt.Println("eroare:", err)
return
}
for _, rand := range strings.Split(strings.TrimSpace(string(iesire)), "\n") {
if strings.HasSuffix(rand, ".pdf") {
fmt.Println("PDF:", rand)
}
}
}
Rezultat
PDF: factura1.pdf
PDF: factura2.pdf
Greșeli frecvente
- Uiți că ieșirea se termină de obicei cu
\n. Aplicăstrings.TrimSpaceînainte să compari. - Ai setat deja
cmd.Stdoutși apeleziOutput: primești eroarea „Stdout already set”.
Comenzi înrudite
exec.Cmd.CombinedOutput: Rulează comanda și returnează împreună ieșirea standard și mesajele de eroare (stdout + stderr).exec.Cmd.Run: Pornește comanda și așteaptă să se termine; returnează eroare dacă nu a pornit sau a ieșit cu cod diferit de 0.exec.Command: Pregătește rularea unui program extern cu argumentele date; programul pornește abia la Run, Output sau Start.exec.Cmd.StdoutPipe: Returnează un Reader legat de ieșirea comenzii, ca să citești rezultatul pe măsură ce apare.