Files
yatm/internal/tools/cmd.go
T
Samuel Cui 4fef653b71 Prepare YATM v1.0.0-alpha.2
Unify file queries and Scan execution, retain indexed Identical results,
improve Job and Preview workflows, and verify release packaging.
2026-10-05 19:08:49 +08:00

44 lines
948 B
Go

package tools
import (
"errors"
"fmt"
"io/fs"
"os"
"os/exec"
"github.com/sirupsen/logrus"
)
func RunCmdWithReturn(logger *logrus.Logger, cmd *exec.Cmd) ([]byte, error) {
out, err := os.CreateTemp("", "*.out")
if err != nil {
return nil, fmt.Errorf("create cmd out fail, %w", err)
}
out.Chmod(fs.ModePerm)
out.Close()
defer os.Remove(out.Name())
cmd.Env = append(cmd.Env, fmt.Sprintf("OUT=%s", out.Name()))
if err := RunCmd(logger, cmd); err != nil {
return nil, err
}
buf, err := os.ReadFile(out.Name())
if err != nil {
return nil, fmt.Errorf("read cmd out fail, %w", err)
}
return buf, nil
}
func RunCmd(logger *logrus.Logger, cmd *exec.Cmd) (rerr error) {
// The command owns both output streams and their logging pipe until Wait completes.
writer := logger.WriterLevel(logrus.InfoLevel)
defer func() { rerr = errors.Join(rerr, writer.Close()) }()
cmd.Stdout = writer
cmd.Stderr = writer
return cmd.Run()
}