英文:
How to get output from os.exec in go
问题
我正在尝试从以下代码中获取系统输出:
cmdString := "lxc exec " + containerName + " -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1"
ip, err := exec.Command("bash", "-c", cmdString).Output()
fmt.Println(ip)
上述代码应该从一个 LXC 容器中获取 IP 地址。
实际的输出是 []
。
我还尝试了以下代码:
ip, err := exec.Command("lxc", "exec", containerName, "--", "ip addr show eth0", "|", "grep", "'inet\b'", "| awk '{print $2}'", "| cut -d/", "-f1").Output()
fmt.Println(ip)
我仍然只得到 []
作为输出。
命令行的正确输出如下所示:
[root@localhost toolbox]# lxc exec simon -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1
10.183.201.38
有什么想法,我做错了什么吗?
英文:
I am trying to get the system output from the following code
cmdString := "lxc exec " + containerName + " -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1"
ip, err := exec.Command("bash", "-c", cmdString).Output()
fmt.Println(ip)
The above code should get the IP Address from an LXC Container.
The actual output from go is []
I have also tried the following
ip, err := exec.Command("lxc", "exec ", containerName, " --", "ip addr show eth0", "|", "grep", "'inet\b'", "| awk '{print $2}'", "| cut -d/", "-f1").Output()
fmt.Println(ip)
I still get just []
as output
The correct output from the command line is like below
[root@localhost toolbox]# lxc exec simon -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1
10.183.201.38
Any ideas what I am doing wrong?
答案1
得分: 1
阅读此代码后,您就可以了解如何读取结果的标准输出。
package main
import (
"bytes"
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("/usr/bin/ls")
buf := bytes.Buffer{}
cmd.Stdout = &buf
err := cmd.Run()
fmt.Println(buf.String(), err)
}
这段代码使用Go语言编写,目的是执行/usr/bin/ls
命令并读取其标准输出。首先,通过exec.Command
函数创建一个cmd
命令对象,指定要执行的命令为/usr/bin/ls
。然后,创建一个bytes.Buffer
对象buf
,用于存储标准输出的内容。接下来,将cmd
的标准输出重定向到buf
,通过cmd.Stdout = &buf
实现。最后,通过cmd.Run()
执行命令,并将执行结果存储在buf
中。最后,通过fmt.Println
打印buf
的内容和可能的错误信息。
这段代码的作用是执行ls
命令并将结果打印出来。
英文:
Read this code then you can understand how to read result`s stdout
package main
import (
"bytes"
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("/usr/bin/ls")
buf := bytes.Buffer{}
cmd.Stdout = &buf
err := cmd.Run()
fmt.Println(buf.String(), err)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论