将 ssh 输出保存到 golang 中的结构的最佳方法是什么?

我正在尝试将使用 SSH 在其他机器上运行某些命令的输出保存到一个结构中。我使用CombinedOutput来保存输出。是这样的:


...

combo, err := session.CombinedOutput("hostname;pwd")

outputResult = string(combo)

...

它给了我一个 2 行输出。我想将这些行保存到以下结构中:


type Result struct {

    Hostname string `json:"hostname"`

    PWD      string `json:"pwd"`

}

最好(和简单)的方法是什么?谢谢。


函数式编程
浏览 56回答 1
1回答

蓝山帝景

它给了我一个 2 行输出。我想将这些行保存到下面的结构中您的问题确实与 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/5ENSgAPg3ERcombo, err := session.CombinedOutput("hostname;pwd")请记住,stderr除了stdout. 我想不出任何一个命令都会向 生成任何输出的情况stderr,但请记住,您没有区分这两者。希望您正在检查的结果,err如果不是nil,则不使用命令的结果。这应该可以保护您免受 stdout 和 stderr 组合的意外结果的影响。如果 stderr 与您无关,您可能想ssh.Session.Output改用
打开App,查看更多内容
随时随地看视频慕课网APP