diff --git a/example1/example1 b/example1/example1 index 625385e..5385b42 100755 Binary files a/example1/example1 and b/example1/example1 differ diff --git a/example1/main.go b/example1/main.go index 4a36503..be88ab4 100644 --- a/example1/main.go +++ b/example1/main.go @@ -3,24 +3,41 @@ package main /* import "log" import "reflect" -import "os" */ +import "os" + // import "github.com/davecgh/go-spew/spew" import "git.wit.com/jcarr/shell" func main() { - shell.SpewOn() shell.Run("ls /tmp") - shell.Run("ping -c 4 localhost") + shell.Run("ping -c 3 localhost") // slow down the polling to every 2 seconds shell.SetDelayInMsec(2000) + shell.Run("ping -c 4 localhost") + // capture ping output into a file + fout, _ := os.Create("/tmp/example1.ping.stdout") + ferr, _ := os.Create("/tmp/example1.ping.stderr") + shell.SetStdout(fout) + shell.SetStderr(ferr) + + shell.Run("ping -c 5 localhost") + + // turn out process exit debugging + shell.SpewOn() + + fout, _ = os.Create("/tmp/example1.fail.stdout") + ferr, _ = os.Create("/tmp/example1.fail.stderr") + shell.SetStdout(fout) + shell.SetStderr(ferr) + // TODO: this might not be working // check error handling shell.Run("ls /tmpthisisnothere") diff --git a/shell.go b/shell.go index bfdac21..b1f7d10 100644 --- a/shell.go +++ b/shell.go @@ -90,8 +90,6 @@ func Run(cmdline string) int { newreader := bufio.NewReader(pstdout) nbr := nbreader.NewNBReader(newreader, 1024) - // nbrerr := nbreader.NewNBReader(newerrreader, 1024) - tmp := bufio.NewReader(pstderr) go NonBlockingReader(tmp, shellStderr) @@ -113,15 +111,19 @@ func Run(cmdline string) int { log.Println("Read() count = ", count, "err = ", err) oneByte = make([]byte, 1024) count, err = nbr.Read(oneByte) - f.Write([]byte(string(oneByte))) + log.Println("STDOUT: count = ", count) + f.Write(oneByte[0:count]) f.Flush() empty = true dead = true } - f.Write([]byte(string(oneByte))) - f.Flush() + // f.Write([]byte(string(oneByte))) if (count == 0) { empty = true + } else { + log.Println("STDOUT: count = ", count) + f.Write(oneByte[0:count]) + f.Flush() } } @@ -180,8 +182,10 @@ func NonBlockingReader(buffReader *bufio.Reader, writeFileHandle *os.File) { log.Println("STDERR: totalCount = ", totalCount) totalCount = 0 } + } else { + log.Println("STDERR: count = ", count) + writeFileHandle.Write(oneByte[0:count]) } - writeFileHandle.Write([]byte(string(oneByte))) } } }