Вещи, кажется, "связаны" правильно.
Возможно, проблема здесь:
var data interface{}
Затем вы делаете:
dec.Decode(&data)
Но это не сработает.
Вам необходимо передать struct
, который фактически может использоваться для декодирования полей в XML, которые возвращает команда nvidia-smi
.
Найдите ниже модифицированный пример (заменив nvidia-smi
на команду echo
, чтобы она возвращала образец XML).
Вы должны настроить структуру, чтобы иметь возможность отображать фактический XML, который вы получите.
Кстати:
- Вы должны проверить ошибку, возвращаемую
decode
на всякий случай
- Я не понимаю, почему вы декодируете в отдельной программе. Я оставил это так в модифицированном примере, но это сработало бы, если бы вы сделали это правильно в той же самой программе.
Пример:
package main
import (
"log"
"os/exec"
"fmt"
"encoding/xml"
)
func checkError(err error) {
if err != nil {
log.Fatalf("Error: %s", err)
}
}
type Result struct {
Value int `xml:"value"`
}
func metrics() {
cmd := exec.Command(
"echo", "-n",
`<result><value>1</value></result>`)
out, err := cmd.StdoutPipe()
checkError(err)
cmd.Start()
defer cmd.Wait()
go func() {
var data Result
dec := xml.NewDecoder(out)
err = dec.Decode(&data)
checkError(err)
fmt.Printf("Data: %+v\n", data)
}()
//go io.Copy(os.Stdout, out)
}
func main() {
metrics()
}