Golang Go语言的标准输出

发布于 1周前 作者 wuwangju 来自 Go语言

我想将 htop 封装到 exec.Command(). 然后继续将输出打印出来, 当我使用 stdout := cmd.StdoutPipe() 加上 bufio.NewScanner(stdout)的时候, 其实只能打印 htop 的一行。 有什么办法模拟 stdout 的输出?
Golang Go语言的标准输出

8 回复

这段加上了么

<br> var stdoutBuilder strings.Builder<br> for stdoutScanner.Scan() {<br> stdoutBuilder.WriteString(stdoutScanner.Text() + "\n")<br> }<br><br>

更多关于Golang Go语言的标准输出的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不是, 最主要的是 stdoutScaner.Text() 是一行, 但是命令每次是覆盖输出。
我这里的 htop 命令只是举例。 大概是这样(下面是举例):
执行 htop 后: 下面的输出会不断刷新。
第一次输出:
hello world!
hello python!
hello java!
第二次输出:
hello china!
hello usa!
hello japan!

这种命令的输出只有 cmd.stdout = os.Stdout , 才能像命令行一样持续输出。 如果使用 stdoutScanner.Text() 这种每次只能得到一样, 根本不知道 hello japan! 的上下文是什么。 我无法获取到有用的信息。

此帖终结, 目前 golang 没有太好的办法。 目前采用的办法是修改调用软件的输出,重新编译源码。

为什么说 Go 没有太好的办法,想实现你说的不断刷新的效果,需要对历史的输出清屏。

我试了下,是可以实现刷新输出的。

https://go.dev/play/p/y6q_pWonwwp

htop 是不是用的 tty 啊?

可以了解一下 pty ,和这个有关,不知道咋说明白

在Go语言中,标准输出(Standard Output)通常是指将数据输出到控制台(终端)的操作。Go语言提供了简洁而强大的标准库来实现这一功能,其中fmt包是最常用的一个。

要使用Go语言进行标准输出,你通常会使用fmt.Printlnfmt.Printffmt.Sprintf等函数。这些函数允许你以不同的格式输出数据。

  1. fmt.Println:这是最常用的函数之一,用于将参数转换为字符串(如果它们不是字符串的话),并在每个参数后面添加一个换行符,然后输出到标准输出。

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, World!")
    }
    
  2. fmt.Printf:这个函数允许你使用格式化字符串来输出数据。格式化字符串中的占位符会被后面的参数替换。

    package main
    
    import "fmt"
    
    func main() {
        name := "Alice"
        age := 30
        fmt.Printf("Name: %s, Age: %d\n", name, age)
    }
    
  3. fmt.Sprintf:这个函数与fmt.Printf类似,但它将格式化的字符串返回为一个字符串,而不是输出到标准输出。

总的来说,Go语言的标准输出非常直观和易用,fmt包提供了强大的格式化功能,可以满足大多数情况下的输出需求。无论是简单的文本输出还是复杂的格式化输出,Go语言都能轻松应对。

回到顶部