我正在嘗試將使用 SSH 在其他機器上運行某些命令的輸出保存到結構中。我使用CombinedOutput來保存輸出。像這樣的東西:
...
combo, err := session.CombinedOutput("hostname;pwd")
outputResult = string(combo)
...
它給了我一個兩行輸出。我想將這些行保存到以下結構中:
type Result struct {
Hostname string `json:"hostname"`
PWD string `json:"pwd"`
}
最好的(也是最簡單的)方法是什么?謝謝。
uj5u.com熱心網友回復:
它給了我一個兩行輸出。我想將這些行保存到下面的結構中
您的問題確實與 SSH 無關。你有一個[]byte代表你的命令的輸出。你想把它分成兩個字串。
strings.SplitN是完美的解決方案。您將原始字串([]byte必須轉換為)、分隔符(\n在您的情況下)以及要回傳的最大字串數傳遞給它。對我們來說,我們最多需要 2 個字串。怎么可能不止一個\n? pwd回傳一個目錄,并且目錄可以在其名稱中包含換行符,盡管它們在實踐中很少這樣做。
out := []byte("myhost\n/dir")
fmt.Println(string(out))
strs := strings.SplitN(string(out), "\n", 2)
res := Result{Hostname: strs[0], PWD: strs[1]}
out := []byte("myhost\n/dir")
fmt.Println(string(out))
strs := strings.SplitN(string(out), "\n", 2)
res := Result{Hostname: strs[0], PWD: strs[1]}
https://go.dev/play/p/5ENSgAPg3ER
combo, err := session.CombinedOutput("hostname;pwd")
請記住,這還將包括stderr除了stdout. 我想不出任何一個命令都會生成任何輸出到 的情況stderr,但請記住,您沒有區分兩者。希望您正在檢查結果,err如果不是nil,則不要使用命令的結果。這應該可以保護您免受 stdout 和 stderr 組合的意外結果。如果 stderr 永遠與您無關,您可能想ssh.Session.Output改用
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/443112.html
標籤:走
