第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在Go中重定向子進(jìn)程的stdout管道

在Go中重定向子進(jìn)程的stdout管道

Go
牛魔王的故事 2021-05-06 19:20:24
我正在用Go編寫程序,該程序執(zhí)行類似程序的服務(wù)器(也就是Go)?,F(xiàn)在,我想在啟動(dòng)父程序的終端窗口中獲得子程序的標(biāo)準(zhǔn)輸出。一種實(shí)現(xiàn)方法是使用cmd.Output()函數(shù),但這僅在進(jìn)程退出后才輸出標(biāo)準(zhǔn)輸出。(這是一個(gè)問題,因?yàn)檫@個(gè)類似于服務(wù)器的程序運(yùn)行了很長(zhǎng)時(shí)間,并且我想讀取日志輸出)變量out是,type io.ReadCloser我不知道該如何使用它來(lái)完成任務(wù),因此我在網(wǎng)絡(luò)上找不到任何有關(guān)此主題的有用信息。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()} 對(duì)代碼的解釋:取消注釋該P(yáng)rintln函數(shù)以獲取要編譯的代碼,我知道這Println(out io.ReadCloser)不是一個(gè)有意義的函數(shù)。(它產(chǎn)生輸出&{3 |0 <nil> 0})只需兩行即可編譯代碼。
查看完整描述

3 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

我相信,如果導(dǎo)入ioos與替換此:

//fmt.Println(out)

有了這個(gè):

go io.Copy(os.Stdout, out)

(見文檔io.Copyos.Stdout),它會(huì)做你想要什么。(免責(zé)聲明:未經(jīng)測(cè)試。)

順便說(shuō)一句,您可能還想通過使用與標(biāo)準(zhǔn)輸出相同的方法來(lái)捕獲標(biāo)準(zhǔn)錯(cuò)誤,但是要使用cmd.StderrPipeos.Stderr。


查看完整回答
反對(duì) 回復(fù) 2021-05-10
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

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


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")

}


查看完整回答
反對(duì) 回復(fù) 2021-05-10
  • 3 回答
  • 0 關(guān)注
  • 379 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)