2 回答

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

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)
}
- 2 回答
- 0 關注
- 241 瀏覽
添加回答
舉報