From d2223187ea7251f5573077baf1ffc38af8545f72 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 6 Apr 2019 06:22:08 -0700 Subject: [PATCH] parse exec() value from the OS Signed-off-by: Jeff Carr --- make-sdcard/main.go | 32 +------------------------------- make-sdcard/ping.go | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/make-sdcard/main.go b/make-sdcard/main.go index 912d711..d1b8d37 100644 --- a/make-sdcard/main.go +++ b/make-sdcard/main.go @@ -2,28 +2,13 @@ package main import "log" import "fmt" -import "strings" import "reflect" import "os" -import "os/exec" -import "bytes" import "github.com/gookit/config" import "github.com/andlabs/ui" import "github.com/davecgh/go-spew/spew" -// dns -// import "github.com/miekg/dns" - -// reminder to use protobuf -// https://github.com/golang/protobuf - -// reminder to use this for JSON -// https://github.com/tidwall/gjson -// value := gjson.Get(json, "name.last") -// println(value.String()) -// value := gjson.Get(json, friends.#[last=="Murphy"].first) - // use mergo to merge structs // import "github.com/imdario/mergo" // mergo.Merge(&dest, src) @@ -45,22 +30,6 @@ func rsync(mybut *ui.Button) { log.Println("run rsync here") } -func exampleCommand(a string, b ...string) { - // cmd := exec.Command(range myargs) - // args := []string{"/tmp", "/"} - // cmd := exec.Command(args) - cmd := exec.Command(a, b...) - cmd.Stdin = strings.NewReader("foobar") - var out bytes.Buffer - cmd.Stdout = &out - err := cmd.Run() - if err != nil { - log.Fatal(err) - } - fmt.Println(out.String()) - // fmt.Printf("in all caps: %q\n", out.String()) -} - func format(mybut *ui.Button) { log.Println("doButton() mybut =", reflect.ValueOf(mybut).Elem()) log.Println("format and mount here") @@ -77,6 +46,7 @@ func format(mybut *ui.Button) { simpleProcess("pwd") simpleProcess("ls -l /aksd") return + simpleProcess("parted -s /dev/sdb mklabel msdos") simpleProcess("parted -s /dev/sdb mkpart primary ext4 1MiB 8GB") simpleProcess("parted -s /dev/sdb mkpart primary ext4 8GB 32GB") diff --git a/make-sdcard/ping.go b/make-sdcard/ping.go index 2c20660..d09620c 100644 --- a/make-sdcard/ping.go +++ b/make-sdcard/ping.go @@ -65,7 +65,7 @@ func ping(hostname string, count int) { } // Spawns a process and captures stdout and stderr -func simpleProcess(cmd string) { +func simpleProcess(cmd string) int { log.Println("START " + cmd) // cmd := exec.Command("ls", "/tmp", "/ballon", "/") @@ -92,10 +92,20 @@ func simpleProcess(cmd string) { } // One must wait for the process to formally finish and flush all buffer output - process.Wait() - spew.Dump(process.ProcessState) - err := process.ProcessState // this should be the exit code of the process - log.Println("END " + cmd, err) + err := process.Wait() + + // try to process the return value from the OS. As of golang 1.12, + // this should be cross platform (linux,macos,windows) + if err != nil { + spew.Dump(err.(*exec.ExitError)) + spew.Dump(process.ProcessState) + stuff := err.(*exec.ExitError) + log.Println("ERROR ", stuff) + log.Println("END ", cmd) + return -1 + } + log.Println("END " + cmd) + return 0 } func exampleScanner() {