golang调用系统命令并获取返回结果信息
时间: 2023-06-27 11:06:20 浏览: 236
在 Go 中,可以使用 `os/exec` 包来调用系统命令并获取返回结果信息。
以下是示例代码:
```go
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "-l") // 要执行的命令和参数
output, err := cmd.Output() // 执行命令并获取输出结果
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(output)) // 输出命令执行结果
}
```
上述代码中,首先创建了一个 `exec.Cmd` 对象,该对象表示要执行的命令及其参数。然后调用 `cmd.Output()` 方法执行命令并获取输出结果,如果执行过程中出现错误,则会返回错误信息。最后将输出结果转换为字符串并打印出来。
相关问题
golang exec.command 登录主机 执行多条命令 uname -n 和 ps aux | grep "named" | grep -v grep | wc -l命令 并判断返回结果 请举例
好的,以下是一个示例代码:
```go
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
// 连接的主机地址和用户名
host := "example.com"
user := "username"
// 登录主机执行的命令
cmds := []string{"uname -n", "ps aux | grep 'named' | grep -v grep | wc -l"}
// 构建 SSH 连接命令
sshCmd := fmt.Sprintf("ssh %s@%s \"%s\"", user, host, strings.Join(cmds, ";"))
// 执行 SSH 连接命令
output, err := exec.Command("bash", "-c", sshCmd).Output()
if err != nil {
fmt.Println("执行命令失败:", err)
return
}
// 解析命令输出
results := strings.Split(strings.TrimSpace(string(output)), "\n")
if len(results) != 2 {
fmt.Println("命令输出不符合预期")
return
}
// 获取命令执行结果
uname := results[0]
namedCount := strings.TrimSpace(results[1])
// 打印结果
fmt.Printf("主机名:%s\n", uname)
fmt.Printf("named 进程数量:%s\n", namedCount)
if namedCount != "0" {
fmt.Println("named 进程正在运行")
} else {
fmt.Println("named 进程未运行")
}
}
```
这个示例代码连接到 `example.com` 主机,使用 `username` 用户名登录,然后依次执行 `uname -n` 和 `ps aux | grep 'named' | grep -v grep | wc -l` 命令,并且判断 `named` 进程的数量是否为 0。最后打印出主机名和 `named` 进程数量,以及进程是否运行的信息。
:golang exec.command 登录主机 执行多条命令 uname -n 和 ps aux | grep "named" | grep -v grep | wc -l命令 并判断返回结果 请举例
好的,以下是一个使用 Golang 中的 exec 包登录主机并执行多条命令的示例代码:
```go
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
// 定义登录主机的命令
sshCmd := "ssh user@hostname"
// 定义要执行的命令
cmd1 := "uname -n"
cmd2 := "ps aux | grep \"named\" | grep -v grep | wc -l"
// 使用 exec.Command 方法创建一个 cmd 对象
cmd := exec.Command("bash", "-c", sshCmd + " \"" + cmd1 + ";" + cmd2 + "\"")
// 执行命令并获取输出结果
output, err := cmd.Output()
if err != nil {
fmt.Println("执行命令出错:", err)
return
}
// 将输出结果转换为字符串并按行分割
lines := strings.Split(string(output), "\n")
// 获取第一条命令的输出结果
result1 := strings.TrimSpace(lines[0])
// 获取第二条命令的输出结果并转换为整数
result2 := strings.TrimSpace(lines[1])
count, err := strconv.Atoi(result2)
if err != nil {
fmt.Println("转换输出结果出错:", err)
return
}
// 输出结果
fmt.Println("第一条命令的输出结果:", result1)
fmt.Println("第二条命令的输出结果:", count)
// 根据命令输出结果进行判断
if result1 == "hostname" && count > 0 {
fmt.Println("命令执行成功!")
} else {
fmt.Println("命令执行失败!")
}
}
```
这个示例代码中,我们首先定义了登录主机的命令 `sshCmd`,然后定义了要执行的两条命令 `cmd1` 和 `cmd2`,使用 `exec.Command` 方法创建一个 cmd 对象,并在其中执行这两条命令,最后将命令输出结果转换为字符串并按行分割,获取每条命令的输出结果,进行判断并输出结果。
阅读全文