关键代码片段
package main
import (
"fmt"
"os/exec"
)
func main() {
// 创建Cmd实例,指定要执行的命令和参数
cmd := exec.Command("ls", "-l")
// 执行命令并获取输出
output, err := cmd.Output()
if err != nil {
fmt.Printf("执行命令出错: %v", err)
return
}
// 输出命令执行结果
fmt.Println(string(output))
}
Cmd
结构体及其相关方法作用
Cmd
结构体:Cmd
结构体代表一个外部命令及其参数。它包含了执行外部命令所需的所有信息,如命令名称、参数、工作目录、环境变量等。
Run
方法:Run
方法会在新的进程中运行命令,并阻塞直到命令完成。它返回命令执行的状态码,如果命令执行成功,状态码为0;如果出错,会返回相应的错误信息。例如:
cmd := exec.Command("ls", "-l")
err := cmd.Run()
if err != nil {
fmt.Printf("命令执行出错: %v", err)
}
Start
方法:Start
方法会在新的进程中启动命令,但不会等待命令完成,而是立即返回。这使得调用者可以在命令执行的同时继续执行其他代码。一般在需要并发执行命令或者需要对命令的执行过程进行更多控制(如后续等待命令完成、获取命令输出等)时使用。例如:
cmd := exec.Command("ls", "-l")
err := cmd.Start()
if err != nil {
fmt.Printf("启动命令出错: %v", err)
return
}
// 可以在此处执行其他代码
err = cmd.Wait()
if err != nil {
fmt.Printf("等待命令完成出错: %v", err)
}
Output
方法:Output
方法会运行命令并等待其完成,然后返回命令的标准输出。如果命令执行过程中返回非零状态码,该方法会返回错误。前面的代码示例中就使用了Output
方法获取ls -l
命令的输出。