亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Go中重定向子進程的stdout管道

在Go中重定向子進程的stdout管道

Go
牛魔王的故事 2021-05-06 19:20:24
我正在用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 <nil> 0})只需兩行即可編譯代碼。
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

我相信,如果導入ioos與替換此:

//fmt.Println(out)

有了這個:

go io.Copy(os.Stdout, out)

(見文檔io.Copyos.Stdout),它會做你想要什么。(免責聲明:未經測試。)

順便說一句,您可能還想通過使用與標準輸出相同的方法來捕獲標準錯誤,但是要使用cmd.StderrPipeos.Stderr。


查看完整回答
反對 回復 2021-05-10
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

對于那些不需要循環使用但希望命令輸出回顯到終端而又不會cmd.Wait()阻塞其他語句的用戶:


package main


import (

    "fmt"

    "io"

    "log"

    "os"

    "os/exec"

)


func checkError(err error) {

    if err != nil {

        log.Fatalf("Error: %s", err)

    }

}


func main() {

    // Replace `ls` (and its arguments) with something more interesting

    cmd := exec.Command("ls", "-l")


    // Create stdout, stderr streams of type io.Reader

    stdout, err := cmd.StdoutPipe()

    checkError(err)

    stderr, err := cmd.StderrPipe()

    checkError(err)


    // Start command

    err = cmd.Start()

    checkError(err)


    // Don't let main() exit before our command has finished running

    defer cmd.Wait()  // Doesn't block


    // Non-blockingly echo command output to terminal

    go io.Copy(os.Stdout, stdout)

    go io.Copy(os.Stderr, stderr)


    // I love Go's trivial concurrency :-D

    fmt.Printf("Do other stuff here! No need to wait.\n\n")

}


查看完整回答
反對 回復 2021-05-10
  • 3 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號