1:exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o.
2:执行shell命令demo:
func RunCommand(lang, strCommand string) (string, bool) { pCommand := exec.Command("/bin/ash", "-c", strCommand) oStdout, err := pCommand.StdoutPipe() if err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "StdoutPipe", err.Error()) return strError, false } oStderr, err := pCommand.StderrPipe() if err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "StderrPipe", err.Error()) return strError, false } if err := pCommand.Start(); err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "Start", err.Error()) return strError, false } aBytesErr, err := ioutil.ReadAll(oStderr) if err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "ReadAll stderr", err.Error()) return strError, false } if len(aBytesErr) != 0 { strError := L(lang, "commd_failed_and_reason", strCommand, "stderr is not nil", string(aBytesErr)) return strError, false } aBytes, err := ioutil.ReadAll(oStdout) if err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "ReadAll stdout", err.Error()) return strError, false } if err := pCommand.Wait(); err != nil { strError := L(lang, "commd_failed_and_reason", strCommand, "Wait", err.Error()) return strError, false } aResult := aBytes if len(aBytes) > 0 && string(aBytes[len(aBytes)-1:]) == "\n" { aResult = aBytes[0 : len(aBytes)-1] } return string(aResult), true }