46 lines
806 B
Go
46 lines
806 B
Go
package subprocess
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
// Tty is a convenience wrapper to allow pseudo-TTYs on *nix systems, create with NewTty()
|
|
// Do not use any of the struct members directly, call the Stderr() and Stdout() methods
|
|
// Remember to call Close() when finished
|
|
type Tty struct {
|
|
cmd *exec.Cmd
|
|
outpty *os.File
|
|
outtty *os.File
|
|
errpty *os.File
|
|
errtty *os.File
|
|
}
|
|
|
|
func (t *Tty) Close() {
|
|
if t.outtty != nil {
|
|
t.outtty.Close()
|
|
t.outtty = nil
|
|
}
|
|
if t.errtty != nil {
|
|
t.errtty.Close()
|
|
t.errtty = nil
|
|
}
|
|
}
|
|
|
|
func (t *Tty) Stdout() (io.ReadCloser, error) {
|
|
if t.outpty != nil {
|
|
return t.outpty, nil
|
|
} else {
|
|
return t.cmd.StdoutPipe()
|
|
}
|
|
}
|
|
|
|
func (t *Tty) Stderr() (io.ReadCloser, error) {
|
|
if t.errpty != nil {
|
|
return t.errpty, nil
|
|
} else {
|
|
return t.cmd.StderrPipe()
|
|
}
|
|
}
|