Метод exec.Cmd.CombinedOutput
Метод exec.Cmd.CombinedOutput выполняет команду,
которую вы настроили через структуру exec.Cmd,
и возвращает результат выполнения в виде среза байтов,
содержащего как стандартный вывод, так и вывод ошибок.
Этот метод полезен, когда вам нужно получить весь вывод
команды без разделения на stdout и stderr.
Метод запускает команду, ожидает ее завершения и возвращает
объединенный вывод. В случае ошибки выполнения команды
возвращается ошибка типа *exec.ExitError.
Синтаксис
func (c *Cmd) CombinedOutput() ([]byte, error)
Пример простой команды
Давайте выполним простую команду echo и получим
объединенный вывод:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("echo", "Hello, World!")
res, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("%q", string(res))
}
Результат выполнения кода:
"Hello, World!\n"
Пример с выводом ошибок
Давайте выполним команду, которая вызывает ошибку, и посмотрим на объединенный вывод, содержащий сообщение об ошибке:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "/nonexistent")
res, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Command failed: %v\n", err)
}
fmt.Printf("%q", string(res))
}
Результат выполнения кода:
"ls: cannot access '/nonexistent': No such file or directory\n"
Пример с обработкой ошибки
Давайте обработаем ошибку выполнения команды и проверим код завершения:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("false")
res, err := cmd.CombinedOutput()
if err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
fmt.Printf("Exit code: %d\n", exitErr.ExitCode())
}
fmt.Printf("Error: %v\n", err)
}
fmt.Printf("Output: %q", string(res))
}
Результат выполнения кода:
"Exit code: 1\nError: exit status 1\nOutput: \"\""
Смотрите также
-
метод
exec.Cmd.Run,
который выполняет команду без получения вывода -
метод
exec.Cmd.Output,
который возвращает только стандартный вывод команды -
метод
exec.Cmd.Start,
который запускает команду асинхронно -
метод
exec.Cmd.Wait,
который ожидает завершения команды