gpt4 book ai didi

shell - 流式 exec.Command StdoutPipe

转载 作者:IT王子 更新时间:2023-10-29 01:38:29 26 4
gpt4 key购买 nike

我正在尝试将 shell 命令的 Stdout 流式传输到控制台,但遇到了困难。

这是我目前拥有的:

cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
fmt.Println(line)
line, err = reader.ReadString('\n')
}

我希望它能打印出从 0 到 10 的数字,但它似乎卡在第 3 行(第一次调用 ReadString

我从 cmd.Output()cmd.CombinedOutput() 开始,但这些方法似乎会缓冲整个输出流,直到命令完成。我需要在输出流式传输时对其进行处理,而不是等到命令完成。

我也试过这个:continuously reading from exec.Cmd output , 但它似乎没有用,我放弃了它,因为我真的想读取行,而不必手动管理缓冲区。

我看过的其他东西:

最佳答案

您需要start命令:

cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
if err := cmd.Start(); err != nil {
// handle error
}
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
fmt.Println(line)
line, err = reader.ReadString('\n')
}

调用Wait到达 EOF 后。

Output 和 CombinedOutput 方法对您有用,因为这些方法会在内部调用 Start。

关于shell - 流式 exec.Command StdoutPipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46723308/

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