package mainimport ("bufio""fmt""io""os""os/exec""sync""time")func main() {layout := "20060102_1504"err := os.MkdirAll("/tmp/test", 0755)if err != nil {fmt.Println("Error making folder")fmt.Println(err)return}logFile, err := os.Create("/tmp/test/" + time.Now().Format(layout) + ".log")if err != nil {fmt.Println("Cannot create logfile")fmt.Println(err)return}// declare writer for logfilewLogFile := bufio.NewWriter(logFile)fmt.Println("Starting to run echo")cmd := exec.Command("echo", "HELLO")// create pipe to use reader to write to stdout and logfile in another goroutiner, w := io.Pipe()cmd.Stderr = wcmd.Stdout = wif err := cmd.Start(); err != nil {fmt.Println(err)return}var wgWriting sync.WaitGroupwgWriting.Add(1)go func(reader io.Reader) {scanner := bufio.NewScanner(reader)for scanner.Scan() {// writing to stdoutfmt.Println(scanner.Text())// writing to logfileif _, err := wLogFile.WriteString(scanner.Text() + "\n"); err != nil {fmt.Println(err)}if err = wLogFile.Flush(); err != nil {fmt.Println(err)}}if err := scanner.Err(); err != nil {fmt.Println(err)}logFile.Close()wgWriting.Done()fmt.Println("END")}(r)cmd.Wait()wgWriting.Wait()fmt.Println("Finished running")}
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
package mainimport ("fmt""io""os/exec")func main() {
fmt.Println("Starting to run echo")cmd := exec.Command("echo", "HELLO")// create pipe to use reader to write to stdout and logfile in another goroutiner, w := io.Pipe()cmd.Stderr = wcmd.Stdout = wif err := cmd.Start(); err != nil {fmt.Println(err)return}
done := make(chan error, 1)go func(reader io.Reader) {<-donefmt.Println("END")}(r)done <- cmd.Wait()fmt.Println("Finished running")}
package mainimport ("fmt""io""os/exec""sync")func main() {
fmt.Println("Starting to run echo")cmd := exec.Command("echo", "HELLO")// create pipe to use reader to write to stdout and logfile in another goroutine
_, w := io.Pipe()
cmd.Stderr = wcmd.Stdout = wif err := cmd.Start(); err != nil {fmt.Println(err)return}
var wg sync.WaitGroupwg.Add(1)go func() {fmt.Println("END")defer func() {wg.Done()w.Close()}()}()cmd.Wait()wg.Wait()fmt.Println("Finished running")}
The changes you told me works good.Btw, any reason why cmd.Wait does not close them if I directly assign values to cmd.Stdout and cmd.Stderr?