比方說,我想在走程序運行「LS」,並將結果存儲在一個字符串。似乎有叉在exec和OS包處理的幾個命令,但他們需要爲標準輸出文件參數等是否有辦法讓輸出作爲一個字符串?如何在Go中獲得系統命令的輸出?
19
A
回答
4
使用exec.Run。它會返回CMD,其中包含在標準輸出(和標準錯誤)領域的os.File。然後你可以使用例如ioutil.ReadAll來閱讀它。
例子:
package main
import (
"exec";
"io/ioutil";
)
func main() {
if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil {
b, _ := ioutil.ReadAll(cmd.Stdout)
println("output: " + string(b))
}
}
2
1
兩個選項,根據不同的模式,你喜歡:通過指定Pipe作爲標準輸出(和標準錯誤,如果你想)
70
現在有一個簡單的方法:
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)
}
哪裏out
是非標準輸出。它在格式[]byte
,但你可以很容易與更改爲字符串:
string(out)
您還可以使用CombinedOutput()
代替Output()
返回標準輸出和標準錯誤。
+3
這應該很可能是現在接受的答案。接受的答案甚至不再編譯。 – 2017-08-01 19:35:27
2
要獲得這兩個輸出和錯誤到單獨的字符串,你可以使用一個字節的緩衝區,像這樣:
cmd := exec.Command("date")
var outb, errb bytes.Buffer
cmd.Stdout = &outb
cmd.Stderr = &errb
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Println("out:", outb.String(), "err:", errb.String())
相關問題
- 1. 在Chicken計劃中獲得系統命令的輸出
- 2. 如何在Go中使用我的系統的命令shell?
- 3. 從標準輸出獲取輸出的系統命令C
- 4. 如何獲得在命令窗口中出現的matlab輸出
- 5. 系統命令輸出錯誤
- 6. 如何在Rust中調用系統命令並捕獲其輸出?
- 7. 如何獲得在命令中的電流輸出或
- 8. 如何在Perl中獲得外部命令的輸出?
- 9. 如何在Perl中獲得Win32 :: Process命令的輸出?
- 10. 如何在發生錯誤時獲取系統命令的輸出?
- 11. 如何在球拍中退出退出狀態並輸出系統命令?
- 12. 獲取系統的輸出命令,使用管道(Python)的
- 13. 如何獲得命令的系統運行()狀態
- 14. 如何在Mac OS中實時獲得頂級命令輸出
- 15. 如何正確使用QMAKE的「系統」命令輸出
- 16. 如何獲取系統命令的輸出作爲函數的返回值?
- 17. 如何捕獲系統的輸出()
- 18. 如何獲得與系統運行進程的PID()在C++中命令
- 19. 如何獲得進度欄在PHP中的Windows系統命令apache
- 20. 如何獲得在循環,如果系統命令是成功的在Perl
- 21. 如何讓 '系統' 命令,在mysql的
- 22. 如何在ruby腳本中輸出系統(git log)命令內的文件名?
- 23. 在Python中,獲取系統命令的輸出作爲字符串
- 24. 如何捕獲命令行中的所有命令和輸出?
- 25. 如何在生產模式下在Rails中記錄系統命令輸出?
- 26. 得到命令的輸出
- 27. 無法讀取R中執行的系統命令的輸出
- 28. OS.system-將OS .system輸出命令的輸出添加到另一個os系統命令的命令
- 29. 「less」命令如何獲得stdin輸入?
- 30. 商店輸出系統命令的入變量r中
我不認爲「exec」包存在了。我不得不使用下面Fatih列出的「os/exec」。 – 2015-08-18 04:25:51