NotePublic/Software/Development/Language/Go/Package/OS/Exec/Golang_执行外部程序.md

31 lines
909 B
Markdown
Raw Normal View History

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