Ich benutze folgenden Code-Segment, um die XML
Definition einer virtuellen Maschine unter XEN Hypervisor
zu erhalten. Der Code versucht der Befehl virsh dumpxml Ubutnu14
auszuführen, die die XML
der VM Ubuntu14
Namen gebenGolang Exec falsches Verhalten
virshCmd := exec.Command("virsh", "dumpxml", "Ubuntu14")
var virshCmdOutput bytes.Buffer
var stderr bytes.Buffer
virshCmd.Stdout = &virshCmdOutput
virshCmd.Stderr = &stderr
err := virshCmd.Run()
if err != nil {
fmt.Println(err)
fmt.Println(stderr.String())
}
fmt.Println(virshCmdOutput.String())
Dieser Code geht immer in den Fehlerzustand für den angegebenen Domain-Namen, und ich bekomme die folgende Ausgabe.
exit status 1
error: failed to get domain 'Ubuntu14'
error: Domain not found: no domain with matching name 'Ubuntu14'
Aber wenn ich den Standalone-Befehl virsh dumpxml Ubuntu14
laufen lasse, erhalte ich die richtige XML
Definition.
Ich würde mich freuen, wenn mir jemand Hinweise geben könnte, was ich falsch mache. Meine Host-Maschine ist Ubuntu-16.04
und golang
Version ist go1.6.2 linux/amd64
Hat der Befehl virsh verlassen sich auf jede Art von Umgebungsvariablen? Wenn Sie einen solchen Befehl ausführen, wird er nicht in Ihrer Shell-Umgebung ausgeführt. – jcbwlkr
Ich glaube nicht, dass das der Grund ist. Wenn ich den "virsh dumpxml" -Befehl aus meinem Code ausführe, wird er korrekt ausgeführt und sagt "error: command' dumpxml' erfordert Option ". Ich erhalte dieselbe Ausgabe, wenn ich sie von der Shell-Umgebung aus starte. –
azizulhakim
Es ist nur eine Ahnung, aber das könnte immer noch das Problem sein, abhängig davon, wie es weiß, wo man nach diesen Domänen suchen soll. Nur um es zu versuchen, vielleicht 'virshCmd: = exec.Command (" sh "," -c "," virsh dumpxml Ubuntu14 ")' – jcbwlkr