wip: pipe stdout & stderr

This commit is contained in:
2023-12-09 02:44:06 +00:00
parent d9d1fe72d4
commit 9128503da1
8 changed files with 217 additions and 6 deletions

2
cmd/experiment/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/dummy/dummy
/starter/starter

View File

@@ -0,0 +1,18 @@
package main
import (
"fmt"
"log"
"time"
)
func main() {
for i := 0; i < 10; i++ {
log.Println("using log.Println")
fmt.Println("using fmt.Println")
time.Sleep(time.Millisecond * 500)
}
log.Println("log: finishing up")
fmt.Println("fmt: finishing up")
}

View File

@@ -0,0 +1,61 @@
package main
import (
"bufio"
"io"
"log"
"os/exec"
"sync"
)
const (
DummyPath = "/workspaces/wingmate/cmd/experiment/dummy/dummy"
)
func main() {
var (
stdout io.ReadCloser
stderr io.ReadCloser
wg *sync.WaitGroup
err error
)
cmd := exec.Command(DummyPath)
if stdout, err = cmd.StdoutPipe(); err != nil {
log.Panic(err)
}
if stderr, err = cmd.StderrPipe(); err != nil {
log.Panic(err)
}
wg = &sync.WaitGroup{}
wg.Add(2)
go pulley(wg, stdout, "stdout")
go pulley(wg, stderr, "stderr")
if err = cmd.Start(); err != nil {
log.Panic(err)
}
wg.Wait()
if err = cmd.Wait(); err != nil {
log.Printf("got error when Waiting for child process: %#v\n", err)
}
}
func pulley(wg *sync.WaitGroup, src io.ReadCloser, srcName string) {
defer wg.Done()
scanner := bufio.NewScanner(src)
for scanner.Scan() {
log.Printf("coming out from %s: %s\n", srcName, scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Printf("got error whean reading from %s: %#v\n", srcName, err)
}
log.Printf("closing %s...\n", srcName)
_ = src.Close()
}