gpt4 book ai didi

go - 使用 StdoutPipe 时将 Stdout 保存到变量

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:34 26 4
gpt4 key购买 nike

我正在尝试使用 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)

关于go - 使用 StdoutPipe 时将 Stdout 保存到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com