Categorygithub.com/xlab/invoker
repositorypackage
1.2.1
Repository: https://github.com/xlab/invoker.git
Documentation: pkg.go.dev

# README

invoker Go Report Card GoDoc

A package providing supercharged primitive for exec.Cmd that redirects StdErr and StdOut for asynchronous and thread-safe reading.

Example

return func(ctx *gin.Context) {
    out := invoker.Run(ctx, "list", "-fmt", "json")
    defer func() {
        go invoker.DrainOut(out)
    }()

    select {
    case <-ctx.Done():
        ctx.AbortWithStatus(504)
        return
    case r := <-out:
        if r.Error != nil {
            ctx.String(500, "%+v", r.Error)
            return
        }

        ctx.Data(200, "application/json", r.StdOut())
    }
}

Redirect to your logging

ctx := context.Background()

logFn := func(data []byte) (stop bool) {
    logger.Info("Output:", string(data))
    return
}

stdErr := invoker.NewWatchedSafeBuffer(ctx, logFn, nil)

out := invoker.RunWithIO(ctx, nil, nil, stdErr, "list", "-fmt", "json")

go invoker.DrainOut(out)

License

MIT