我試圖將free命令的輸出分成 3 行。free 的一般輸出是total used free shared buff/cache available
Mem: 16309236 11129884 860300 534300 4319052 4306208
Swap: 20971516 234236 20737280但是當我使用 strings.Split() 時,golang該Split函數的行為現在符合預期。我嘗試調試它但找不到任何東西。請幫忙。package mainimport "os/exec"import "github.com/golang/glog"import "fmt"import "strings"import "errors"func thisWorks() { str_out := "hello world \n How are you \nthis is good" lines := strings.Split(str_out, "\n") fmt.Printf("lines is \n%s\n", lines)}func GetFreeOutput() error { var errMsg string bytes_out, err := exec.Command("free").Output() // This shows that the output has 10 (newline) in it. fmt.Println(bytes_out) if err != nil { errMsg = "Error geting output of free command" glog.Fatal(errMsg) return errors.New(errMsg) } str_out := string(bytes_out) fmt.Printf("str_out is \n%s", str_out) // This is not splitting the lines, it is converting the whole output to a single line. fmt.Println("\nLines are ", strings.Split(str_out, "\n")) index_of_newline := strings.Index(str_out, "\n") // This gives the index of "\n" as 79 on my machine, which is correct. fmt.Printf("\nIndex is %d", index_of_newline) fmt.Println("\nLine using index are ", strings.Split(str_out, string(str_out[index_of_newline]))) return nil}func main() { err := GetFreeOutput() fmt.Printf("Error is %s", err)}
1 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
Split 正在按預期工作。問題在于如何打印線條。
下面 Println 的第二個參數是一個切片。
// This is not splitting the lines, it is converting the whole output to a single line.
fmt.Println("\nLines are ", strings.Split(str_out, "\n"))
根據fmt文檔,切片打印為:
[elem0 elem1 ...]
請注意,元素由空格分隔。按 \n 拆分并打印實際上會將 \n 替換為 ' '。嘗試此代碼以確認拆分是否按預期工作:
for i, line := range strings.Split(str_out, "\n") {
fmt.Println(i, line)
}
- 1 回答
- 0 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消