go语言用来执行一个系统的命令相对python来说还是有点复杂的,执行命令是一个非常常见的需求,如调用一个系统命令,启一个exe等,这里分为几种情况,之后统一总结一下。
- 只执行命令,不要输出结果
- 执行命令并且要获取到输出结果
- 阻塞和异步的执行
以下以ping www.baidu.com 为例依次执行一下各种命令,主要使用标准库中的os/exec
在执行命令的时候,我们主要使用的是os/exec包主的Cmd结构体方法,Cmd的结构体定义如下 Cmd结构体定义[1]
主要的参数有
Path string// Args保管命令的参数,包括命令名作为第一个参数;如果为空切片或者nil,相当于无参数命令。 典型用法下,Path和Args都应被Command函数设定。Args []string// Env指定进程的环境,如为nil,则是在当前进程的环境下执行。Stdin io.Reader// Stdout和Stderr指定进程的标准输出和标准错误输出。 如果任一个为nil,Run方法会将对应的文件描述符关联到空设备(os.DevNull) 如果两个字段相同,同一时间最多有一个线程可以写入。Stdout io.WriterStderr io.Writer
但是我们一般不直接构造Cmd结构体,而是通过exec.Command() 函数返回一个Cmd结构体指针 如 exec.Command("ping