Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "os/exec"
- "strings"
- "sync"
- )
- var wg sync.WaitGroup
- func execCode(code string) string {
- cmd := exec.Command(code)
- builder := strings.Builder{}
- cmd.Stdout = &builder
- err := cmd.Run()
- if err != nil {
- return err.Error()
- }
- return builder.String()
- }
- func worker(ch chan string, out chan string) {
- wg.Add(1)
- for cmd := range ch {
- t := execCode(cmd)
- out <- t
- }
- wg.Done()
- }
- func closeOutput(out chan string) {
- wg.Wait()
- close(out)
- }
- func main() {
- //ch := make(chan string, 100)
- //out := make(chan string, 100)
- //
- //go worker(ch, out)
- //go worker(ch, out)
- //go worker(ch, out)
- //go printer(out)
- //
- //var s string
- //var err error
- //n := 0
- //for _, err = fmt.Scanln(&s); err == nil; _, err = fmt.Scanln(&s) {
- // fmt.Println("Readed", s)
- // n += 1
- // ch <- s
- //}
- //
- //time.Sleep(2 * time.Second)
- ch := make(chan string, 10)
- out := make(chan string, 10)
- go worker(ch, out)
- go worker(ch, out)
- go worker(ch, out)
- var err error
- var s string
- for _, err = fmt.Scanln(&s); err == nil; _, err = fmt.Scanln(&s) {
- ch <- s
- }
- close(ch)
- go closeOutput(out)
- for output := range out {
- fmt.Println(output)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement