我有一个大缓冲区(buffer [] byte),我想打印到stdout,但通过寻呼机管道,如更少或更多。有点像男人的命令。我不想先将缓冲区写入tmp文件,或者让用户手动将输出传递给命令行上的寻呼机。
我可以找到examples如何将一个命令的输出传递给另一个命令,但没有任何东西以内部缓冲区开头。
有什么想法吗? 感谢。
答案 0 :(得分:2)
为了管道到寻呼机,你可以这样做:
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
}
答案 1 :(得分:0)
听起来你需要的是Encoder
。您是否正在使用寻呼机包?如果是这样,您可能想要在包中查找编码器,或者如果没有提供编码器,则创建自己的编码器。
以下是如何使用JSON编码器实现类似于您尝试执行的操作的示例:
b := []byte(`{ ... some json object ... }`)
json_encoder := json.NewEncoder(os.Stdout)
json_encoder.Encode(b)
在此示例中,JSON编码器接受[]字节并完成所有工作以将其编码为JSON文档并写入提供的io.writer。如果你正在使用一个软件包并且它没有提供编码器,你可以通过查看JSON Encoder源代码来创建自己的编码,从而获得如何编写编码器的想法。