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

909 B
Raw Blame History

Golang 执行外部程序

需要使用 os/exec 包。

示例如下:

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。