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
}