Что произойдёт, если выполнить такой фрагмент кода в Go?
cmd := exec.Command("vim", "filename")
cmd.Run()
Что угодно, но только не то, что ожидает разработчик.
Чтобы пользователей вашей программы на смог работать с другой программой в интерактивном режиме, нужно добавить несколько строк:
cmd := exec.Command("vim", "filename")
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Run()
Ещё несколько способов это сделать, найденные на просторах интернета:
func Run(name string, args ...string) os.Error {
cmd := Command(name, args...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = os.Environ()
return cmd.Run()
}
func Exec(bin string, arg string) (retStr string,err os.Error) {
cmd,err:=exec.LookPath(bin)
if err != nil {
return "",err
}
if arg != "" {
arg= cmd + " " + arg
}
a:=strings.Split(arg," ",-1)
c,err := exec.Run(cmd, a,nil, "", exec.DevNull, exec.Pipe, exec.DevNull)
if err != nil {
return "",err
}
defer c.Close()
out,_:=ioutil.ReadAll(c.Stdout)
retStr= strings.TrimRight(string(out),"\n")
return retStr,nil
}