go - 如何通过寻呼机将缓冲区打印到标准输出?

标签 go

我有一个大缓冲区(缓冲区[]字节),我想将其打印到标准输出,但通过寻呼机进行管道传输,例如 less 或 more。有点像 man 命令。我不想先将缓冲区写入 tmp 文件,也不想让用户在命令行上手动将输出通过管道传输到寻呼机。

我可以找到examples如何将一个命令的输出通过管道传输到另一个命令,但没有从内部缓冲区开始。

有什么想法吗? 谢谢。

最佳答案

为了通过管道传输到寻呼机,您可以执行以下操作:

package main

import (
        "fmt"
        "io"
        "os"
        "os/exec"
)

func main() {
        // declare your pager
        cmd := exec.Command("less")
        // create a pipe (blocking)
        r, stdin := io.Pipe()
        // Set your i/o's
        cmd.Stdin = r
        cmd.Stdout = os.Stdout
        cmd.Stderr = os.Stderr

        // Create a blocking chan, Run the pager and unblock once it is finished
        c := make(chan struct{})
        go func() {
                defer close(c)
                cmd.Run()
        }()

        // Pass anything to your pipe
        fmt.Fprintf(stdin, "hello world\n")

        // Close stdin (result in pager to exit)
        stdin.Close()

        // Wait for the pager to be finished
        <-c
}

关于go - 如何通过寻呼机将缓冲区打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738674/

相关文章:

go - 如何检查 NATS 请求是否已取消

go - 对切​​片上的 append() 行为感到困惑

Go Modules : finding out right pseudo-version (vX. Y.Z-<timestamp>-<commit>) 所需包

Golang - 为什么这个错误发生在 ServeHTTP 函数 : reflect: call of reflect. Value.Call on zero Value

go - 将 google Inject 与提供者函数的多重返回连线

go - 获取特定帖子的网址

oop - 去 "polymorphism"

go - 如何在不不断传递用户名/密码的情况下识别 Go 服务器上的用户

go - 防止 go build 覆盖 go.mod 中的版本

go - 将带有 uint8_t *num 的 C 结构转换为 Go