2025-01-24 09:59:28 +08:00

36 lines
812 B
Go

package main
import (
"bytes"
"context"
"fmt"
"os/exec"
"time"
)
// localExecSSHCommand 执行本地命令并返回命令输出和错误信息
func localExecSSHCommand(command string, timeout time.Duration) (string, error) {
// 使用上下文设置超时时间
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
// 创建命令实例
cmd := exec.CommandContext(ctx, "sh", "-c", command)
// 捕获命令输出
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
// 执行命令
err := cmd.Run()
if ctx.Err() == context.DeadlineExceeded {
return "", fmt.Errorf("command timeout exceeded: %v", command)
}
if err != nil {
return "", fmt.Errorf("command failed: %v, stderr: %s", err, stderr.String())
}
return stdout.String(), nil
}