代码拉取完成,页面将自动刷新
package tools
import (
"bytes"
"context"
"os/exec"
"go.uber.org/zap"
)
// CommandExecutor 用于执行命令并捕获输出
type CommandExecutor struct {
Command string
Args []string
Stdout bytes.Buffer
Stderr bytes.Buffer
}
// NewCommandExecutor 创建一个新的 CommandExecutor 实例
func NewCommandExecutor() *CommandExecutor {
return &CommandExecutor{}
}
// Run 执行命令并等待其完成
func (ce *CommandExecutor) Run(ctx context.Context, command string, args ...string) error {
ce.Command = command
ce.Args = args
WithTraceID(ctx.Value(TraceIDKey{}).(string)).Info("args", zap.Any("args", args))
cmd := exec.Command(ce.Command, ce.Args...)
cmd.Stdout = &ce.Stdout
cmd.Stderr = &ce.Stderr
WithTraceID(ctx.Value(TraceIDKey{}).(string)).Info("Command:", zap.String("command", cmd.String()))
if err := cmd.Start(); err != nil {
WithTraceID(ctx.Value(TraceIDKey{}).(string)).Error("Error starting command:", zap.Error(err))
return err
}
if err := cmd.Wait(); err != nil {
WithTraceID(ctx.Value(TraceIDKey{}).(string)).Error("Command finished with error:", zap.Error(err))
return err
}
return nil
}
// Output 获取标准输出
func (ce *CommandExecutor) Output() string {
return ce.Stdout.String()
}
// StderrOutput 获取标准错误输出
func (ce *CommandExecutor) StderrOutput() string {
return ce.Stderr.String()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。