登录
首页 >  Golang >  Go问答

重定向Go中子进程的stdout管道

来源:Golang技术栈

时间:2023-04-05 12:28:24 125浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《重定向Go中子进程的stdout管道》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我正在用 Go 编写一个程序,它执行类似程序的服务器(也是 Go)。现在我想在我启动父程序的终端窗口中拥有子程序的标准输出。一种方法是使用该cmd.Output()函数,但这仅在进程退出后打印标准输出。(这是一个问题,因为这个类似服务器的程序运行了很长时间,我想读取日志输出)

变量out是的type io.ReadCloser,我不知道我应该用它做什么来完成我的任务,我在网上找不到关于这个主题的任何有用的东西。

func main() {
    cmd := exec.Command("/path/to/my/child/program")
    out, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Println(err)
    }
    err = cmd.Start()
    if err != nil {
        fmt.Println(err)
    }
    //fmt.Println(out)
    cmd.Wait()
} 

代码说明:取消注释Println函数以获取要编译的代码,我知道这Println(out io.ReadCloser)不是一个有意义的函数。
(它产生输出&{3 |0 0})这两行只是让代码编译所必需的。

正确答案

现在我想在我启动父程序的终端窗口中拥有子程序的标准输出。

无需弄乱管道或 goroutines,这很容易。

func main() {
    // Replace `ls` (and its arguments) with something more interesting
    cmd := exec.Command("ls", "-l")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Run()
}

今天关于《重定向Go中子进程的stdout管道》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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