dqd2800
2018-01-14 19:17
浏览 290
已采纳

在Go中实时打印exec命令中的stdout [重复]

I have a small Go tool which basically allows the user to define an command that than will be run using os/exec.

My problem is that I want to show the user the output (stdout/stderr) of the command.

An example could look like this: The user defines a command that in the end is sh test.sh. Content of test.sh:

echo "Start"
sleep 7s
echo "Done"

With my current implementation the user can only see the output once the complete command finished. In the example above the user wouldn't see the output Start until the sleep command and the second echo finish.

I currently retrieve the output of the command like this:

cmd := exec.Command(command, args...)
cmd.Dir = dir
// Attach to the standard out to read what the command might print
stdout, err := cmd.StdoutPipe()
if err != nil {
    log.Panic(err)
}
// Execute the command
if err := cmd.Start(); err != nil {
    log.Panic(err)
}

buf := new(bytes.Buffer)
buf.ReadFrom(stdout)
log.Print(buf.String())

Is it somehow possible to read the stdout/stderr in real-time. Meaning that as soon as the user defined command creates and output it is printed?

</div>

图片转代码服务由CSDN问答提供 功能建议

此问题已经存在 在这里有一个答案:

  • 如何在实际输出时如何将命令的stdout和stderr重定向到控制台和日志文件 时间? 1个答案

    我有一个小的Go工具,该工具基本上允许用户定义一个命令,然后该命令将使用 os / exec 运行

    我的问题是我想向用户显示命令的输出(stdout / stderr)。

    一个示例可能看起来像这样 : 用户定义的命令最后是 sh test.sh test.sh 的内容: \ n

      echo“开始” 
    sleep 7s 
    echo“完成” 
       
     
     

    在我当前的实现中,用户只能看到一次完整的输出 命令完成。 在上面的示例中,用户只有在 sleep 命令和第二个 echo 完成后才能看到输出 Start

    我目前正在这样检索命令的输出:

      cmd:= exec.Command(command,args ...)
    cmd.Dir = dir  
     //附加到标准输出以读取命令可能打印的内容
    stdout,err:= cmd.StdoutPipe()
    if err!= nil {
     log.Panic(err)
    } 
     //执行 命令
    if err:= cmd.Start();  err!= nil {
     log.Panic(err)
    } 
     
    buf:= new(bytes.Buffer)
    buf.ReadFrom(stdout)
    log.Print(buf.String())
       
     
     

    是否可以通过实时读取stdout / stderr。 意味着用户定义的命令一旦创建并输出,便立即打印出来?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题