mirror of
https://github.com/samuelncui/yatm.git
synced 2026-11-08 12:26:33 +00:00
Unify file queries and Scan execution, retain indexed Identical results, improve Job and Preview workflows, and verify release packaging.
44 lines
948 B
Go
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()
|
|
}
|