登录
首页 >  Golang >  Go问答

使用 StdoutPipe 时将 Stdout 保存到变量

来源:stackoverflow

时间:2024-04-08 21:51:34 222浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《使用 StdoutPipe 时将 Stdout 保存到变量》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试使用 go 运行包含管道的命令,然后将命令的输出保存到稍后使用的变量中。下面的代码将检索要上传到 amazon s3 的最新文件的文件名并将其输出到终端。这样做的目的是为了以后可以使用文件名来生成项目。key:

package main

import (
    "os"
    "os/exec"
)

func main() {
    c1 := exec.Command("aws", "s3", "ls", "bucket", "--recursive")
    c2 := exec.Command("sort")
    c3 := exec.Command("tail", "-n", "1")
    c4 := exec.Command("awk", "{print $4}")
    c2.Stdin, _ = c1.StdoutPipe()
    c3.Stdin, _ = c2.StdoutPipe()
    c4.Stdin, _ = c3.StdoutPipe()
    c4.Stdout = os.Stdout
    _ = c4.Start()
    _ = c3.Start()
    _ = c2.Start()
    _ = c1.Run()
    _ = c2.Wait()
    _ = c3.Wait()
    _ = c4.Wait()
}

我想将输出保存到变量中,而不是/以及将文件名输出到终端。

有人知道从哪里开始吗?


解决方案


您可以将任何 io.writer 分配给 stdout。因此,如果您想将输出存储到变量中,最简单的方法可能是:

out := &bytes.buffer{}
c4.stdout = out

然后输出存储在 out 中,可以通过调用 out.bytes()out.string() 来获取,具体取决于您想要 []bytestring

要将输出流式传输到屏幕,io.multiwriter 可以提供帮助。当调用 write 时,它​​会写入所有给定的 writer。所以你可以这样做:

out := &bytes.Buffer{}
c4.Stdout = io.MultiWriter(out, os.Stdout)

本篇关于《使用 StdoutPipe 时将 Stdout 保存到变量》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>