Skip to content

⏱️ RunWithTimeout

在指定超时时间内执行 Composer 命令,超时后自动取消。内部基于 RunWithContext 实现。

何时使用

当某个命令可能运行很久(如大型项目的 installupdate),你希望给它一个明确的时间上限时使用。Run 默认 10 分钟,本方法可自定义。

签名

go
func (c *Composer) RunWithTimeout(timeout time.Duration, args ...string) (string, error)

参数

参数类型说明
timeouttime.Duration命令执行的最大超时时间
args...string命令参数,第一个参数是 Composer 子命令

返回值

返回值类型说明
第一返回值string命令的标准输出(含合并的 stderr)
第二返回值error命令执行失败或超时(context.DeadlineExceeded)时返回

示例

go
package main

import (
	"fmt"
	"log"
	"time"

	"github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
	comp, err := composer.New(composer.DefaultOptions())
	if err != nil {
		log.Fatalf("初始化失败: %v", err)
	}

	// 给安装命令 30 分钟超时
	output, err := comp.RunWithTimeout(30*time.Minute, "install")
	if err != nil {
		log.Fatalf("安装超时或失败: %v", err)
	}
	fmt.Println("安装完成:")
	fmt.Println(output)
}

进阶

  • 需要手动取消使用 RunWithContext
  • 不需要自定义超时使用 Run(默认 10 分钟,由 Options.DefaultTimeout 决定)。
  • 调整默认超时可在构造时设置 Options.DefaultTimeout

基于 MIT 许可证发布