将 ssh 输出保存到 golang 中的结构的最佳方法是什么?
What is the best way to save ssh output into a struct in golang?
我正在尝试将 运行 其他机器上使用 SSH 的一些命令的输出保存到一个结构中。
我使用 CombinedOutput 来保存输出。像这样:
...
combo, err := session.CombinedOutput("hostname;pwd")
outputResult = string(combo)
...
它给了我一个 2 行输出。我想将这些行保存到下面的结构中:
type Result struct {
Hostname string `json:"hostname"`
PWD string `json:"pwd"`
}
最好(也最简单)的方法是什么?谢谢
It gives me a 2-line output. I want to save these lines into the below struct
你的问题确实与SSH无关。您有一个 []byte
代表命令的输出。你想把它分成两个字符串。
strings.SplitN
是完美的解决方案。您将原始字符串([]byte
必须转换成的字符串)、分隔符(在您的情况下为 \n
)和最大字符串数 return 传递给它。对于我们来说,我们最多需要 2 个字符串。怎么可能不止一个\n
? pwd
return 是一个目录,目录的名称中可以有换行符,尽管实际上很少这样做。
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")
请记住,除了 stdout
之外,这还将包括 stderr
。我想不出任何一个命令都会向 stderr
生成任何输出的情况,但请记住,您没有区分这两者。希望您正在检查 err
的结果,如果不是 nil
,则不会使用命令的结果。这应该可以保护您免受 stdout 和 stderr 组合的意外结果的影响。如果 stderr 与您无关,您可能需要使用 ssh.Session.Output
而不是
我正在尝试将 运行 其他机器上使用 SSH 的一些命令的输出保存到一个结构中。 我使用 CombinedOutput 来保存输出。像这样:
...
combo, err := session.CombinedOutput("hostname;pwd")
outputResult = string(combo)
...
它给了我一个 2 行输出。我想将这些行保存到下面的结构中:
type Result struct {
Hostname string `json:"hostname"`
PWD string `json:"pwd"`
}
最好(也最简单)的方法是什么?谢谢
It gives me a 2-line output. I want to save these lines into the below struct
你的问题确实与SSH无关。您有一个 []byte
代表命令的输出。你想把它分成两个字符串。
strings.SplitN
是完美的解决方案。您将原始字符串([]byte
必须转换成的字符串)、分隔符(在您的情况下为 \n
)和最大字符串数 return 传递给它。对于我们来说,我们最多需要 2 个字符串。怎么可能不止一个\n
? pwd
return 是一个目录,目录的名称中可以有换行符,尽管实际上很少这样做。
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")
请记住,除了 stdout
之外,这还将包括 stderr
。我想不出任何一个命令都会向 stderr
生成任何输出的情况,但请记住,您没有区分这两者。希望您正在检查 err
的结果,如果不是 nil
,则不会使用命令的结果。这应该可以保护您免受 stdout 和 stderr 组合的意外结果的影响。如果 stderr 与您无关,您可能需要使用 ssh.Session.Output
而不是