我有一个大缓冲区(缓冲区[]字节),我想将其打印到标准输出,但通过寻呼机进行管道传输,例如 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/