31 lines
960 B
Markdown
31 lines
960 B
Markdown
|
# Golang 执行外部程序
|
|||
|
|
|||
|
需要使用 os/exec 包。
|
|||
|
|
|||
|
示例如下:
|
|||
|
|
|||
|
```go
|
|||
|
func MakeCmd(name string, arg ...string) *exec.Cmd {
|
|||
|
cmd := exec.Command(name, arg...)
|
|||
|
cmd.Env = append(cmd.Env, "USER=root")
|
|||
|
cmd.Env = append(cmd.Env, "HOME=/home/root")
|
|||
|
cmd.Env = append(cmd.Env, "SHELL=/bin/sh")
|
|||
|
cmd.Env = append(cmd.Env, "LOGNAME=root")
|
|||
|
cmd.Env = append(cmd.Env, "PATH=/usr/local/bin:/usr/bin:/bin:/xt/scripts:/usr/local/sbin:/usr/sbin:/sbin:/xt/scripts")
|
|||
|
return cmd
|
|||
|
}
|
|||
|
|
|||
|
func main() {
|
|||
|
cmd := MakeCmd("ls", "-l", "/")
|
|||
|
output, _ := cmd.Output()
|
|||
|
fmt.Println(output)
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
exec.Cmd 有 Start、Wait、Run、Output 等方法,其中
|
|||
|
|
|||
|
* Start:非阻塞执行;
|
|||
|
* Wait:阻塞进程,等待命令执行结束, 经常与 Star 配合使用;
|
|||
|
* Run:阻塞进程,直到命令执行结束,相当于 Start+Wait 的组合;
|
|||
|
* Output:阻塞进程,直到命令执行结束,比 Run 方法多返回程序的 stdout。
|