Guest User

Untitled

a guest
Apr 1st, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.62 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "errors"
  5.     "fmt"
  6.     "io"
  7.     "io/ioutil"
  8.     "os/exec"
  9. )
  10.  
  11. type Dump struct {
  12.     cmd *exec.Cmd
  13.     stdIn io.WriteCloser
  14.     stdErr io.ReadCloser
  15.     stdOut io.ReadCloser
  16. }
  17.  
  18. func (d *Dump) Wait() error {
  19.     defer d.stdOut.Close()
  20.     defer d.stdErr.Close()
  21.     defer d.stdIn.Close()
  22.  
  23.     err := d.cmd.Wait()
  24.     if exitError, ok := err.(*exec.ExitError); ok {
  25.         status := exitError.ExitCode()
  26.         if status != 0 {
  27.             errout, _ := ioutil.ReadAll(d.stdErr)
  28.             return errors.New(string(errout))
  29.         }
  30.     }
  31.     return nil
  32. }
  33.  
  34. func (d *Dump) Close() error {
  35.     return nil
  36. }
  37.  
  38. func Create() (*Dump, error) {
  39.  
  40.     cmd := exec.Command("/home/alex/Projects/jcluster/t.sh")
  41.  
  42.     stdIn, err := cmd.StdinPipe()
  43.     if err != nil {
  44.         return nil, err
  45.     }
  46.  
  47.     stdErr, err := cmd.StderrPipe()
  48.     if err != nil {
  49.         return nil, err
  50.     }
  51.  
  52.     stdOut, err := cmd.StdoutPipe()
  53.     if err != nil {
  54.         return nil, err
  55.     }
  56.  
  57.  
  58.     data := "asdasd\nsdfsdf\ndfgdfg"
  59.     _, err = stdIn.Write([]byte(data))
  60.     if err != nil {
  61.         return nil, err
  62.     }
  63.  
  64.     dump := &Dump{
  65.         cmd:    cmd,
  66.         stdIn:  stdIn,
  67.         stdErr: stdErr,
  68.         stdOut: stdOut,
  69.     }
  70.  
  71.     err = dump.cmd.Start()
  72.     if err != nil {
  73.         return nil, err
  74.     }
  75.  
  76.     return dump, nil
  77. }
  78.  
  79. func Save(r io.Reader) error {
  80.     p := make([]byte, 1024)
  81.     for {
  82.         l, err := r.Read(p)
  83.         if err != nil {
  84.             return err
  85.         }
  86.         data := string(p[:l])
  87.         fmt.Println(data)
  88.     }
  89.  
  90.     return nil
  91. }
  92.  
  93. func main() {
  94.     var dump *Dump
  95.  
  96.     go func() {
  97.         d, err := Create()
  98.         if err != nil {
  99.             panic(err)
  100.         }
  101.         dump = d
  102.  
  103.         err = d.Wait()
  104.         if err != nil {
  105.             panic(err)
  106.         }
  107.     }()
  108.  
  109.     err := Save(dump.stdOut)
  110.     if err != nil {
  111.         panic(err)
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment