Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "os/exec"
  6. "strings"
  7. "sync"
  8. )
  9.  
  10. var wg sync.WaitGroup
  11.  
  12. func execCode(code string) string {
  13. cmd := exec.Command(code)
  14. builder := strings.Builder{}
  15. cmd.Stdout = &builder
  16.  
  17. err := cmd.Run()
  18. if err != nil {
  19. return err.Error()
  20. }
  21. return builder.String()
  22.  
  23. }
  24. func worker(ch chan string, out chan string) {
  25. wg.Add(1)
  26. for cmd := range ch {
  27. t := execCode(cmd)
  28. out <- t
  29. }
  30. wg.Done()
  31.  
  32. }
  33.  
  34. func closeOutput(out chan string) {
  35. wg.Wait()
  36. close(out)
  37. }
  38.  
  39. func main() {
  40. //ch := make(chan string, 100)
  41. //out := make(chan string, 100)
  42. //
  43. //go worker(ch, out)
  44. //go worker(ch, out)
  45. //go worker(ch, out)
  46. //go printer(out)
  47. //
  48. //var s string
  49. //var err error
  50. //n := 0
  51. //for _, err = fmt.Scanln(&s); err == nil; _, err = fmt.Scanln(&s) {
  52. // fmt.Println("Readed", s)
  53. // n += 1
  54. // ch <- s
  55. //}
  56. //
  57. //time.Sleep(2 * time.Second)
  58.  
  59. ch := make(chan string, 10)
  60. out := make(chan string, 10)
  61.  
  62. go worker(ch, out)
  63. go worker(ch, out)
  64. go worker(ch, out)
  65.  
  66. var err error
  67. var s string
  68. for _, err = fmt.Scanln(&s); err == nil; _, err = fmt.Scanln(&s) {
  69. ch <- s
  70. }
  71. close(ch)
  72. go closeOutput(out)
  73. for output := range out {
  74. fmt.Println(output)
  75. }
  76.  
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement