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

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

默認情況下將命令輸出轉到標準輸出?

默認情況下將命令輸出轉到標準輸出?

Go
神不在的星期二 2021-11-22 20:05:02
我開始學習和使用 Go 來看看制作一些更復雜的控制臺/cli 類型的工具而不是使用 shell 或 Python 是什么感覺。我想執行命令并顯示輸出。我想出了如何打印這樣的輸出:out, err := exec.Command("pwd").Output()print(string(out))有沒有辦法執行命令并讓它像 shell 腳本一樣默認為標準輸出,或者我需要為此創建一個輔助函數嗎?更新:在獲得 IntelliJ 和 Go 插件后,我在 Go 源代碼中摸索并同意目前沒有輔助方法就無法解決。根據 exec.go 源代碼中的此注釋,無法重用 Cmd 對象:// A Cmd cannot be reused after calling its Run, Output or CombinedOutput// methods.我確實將 stdout 選項合并到了我自己的助手中,包括其他選項,如 shell 集成。如果我可以使它有用,我會嘗試將其轉換為開源。Go 的第一天很有趣。
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

解決方案

實際上,這很容易。您可以將命令的標準輸出設置為os.StdoutBob 是您的叔叔:


package main


import (

  "os"

  "os/exec"

)


func main() {


  cmd := exec.Command("pwd")


  cmd.Stdout = os.Stdout


  err := cmd.Run()


  if err != nil {

    panic(err)

  }

}

這里發生了什么事?

默認情況下,命令的輸出存儲在bytes.Buffer ifcmd.Stdout未設置為 another 中io.Writer。然后調用cmd.Output()運行命令并將輸出保存到所述緩沖區。


由于os.Stdout實現了io.Writer接口,我們簡單地設置cmd.Stdout為os.Stdout. 現在當.Run()被調用時,命令的輸出被寫入io.Writer定義的 in cmd.Stdout,這恰好是os.Stdout并且輸出被寫入shell。


編輯:根據評論,如果所有命令都應該寫入os.Stdout,當然沒有辦法阻止某些幫助程序。我會這樣做:


package main 


import (

 "os"

 "os/exec"

)


func CmdToStdout( c string ) (err error){

  cmd := exec.Command(c)

  cmd.Stdout = os.Stdout

  err = cmd.Run()

  return

}


func main() {


  err := CmdToStdout("pwd")

  if err != nil {

    panic(err)

  }

}


查看完整回答
反對 回復 2021-11-22
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

如果你經常需要這個,你必須創建一個助手(5 行看起來太多了)。根據文檔,這是推薦的方法:


package main


import (

    "fmt"

    "log"

    "os/exec"

)


func main() {

    out, err := exec.Command("date").Output()

    if err != nil {

        log.Fatal(err)

    }

    fmt.Printf("The date is %s\n", out)

}


查看完整回答
反對 回復 2021-11-22
  • 2 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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