You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
629 B
34 lines
629 B
// +build !windows |
|
|
|
package pty |
|
|
|
import ( |
|
"os" |
|
"os/exec" |
|
"syscall" |
|
) |
|
|
|
// Start assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, |
|
// and c.Stderr, calls c.Start, and returns the File of the tty's |
|
// corresponding pty. |
|
func Start(c *exec.Cmd) (pty *os.File, err error) { |
|
pty, tty, err := Open() |
|
if err != nil { |
|
return nil, err |
|
} |
|
defer tty.Close() |
|
c.Stdout = tty |
|
c.Stdin = tty |
|
c.Stderr = tty |
|
if c.SysProcAttr == nil { |
|
c.SysProcAttr = &syscall.SysProcAttr{} |
|
} |
|
c.SysProcAttr.Setctty = true |
|
c.SysProcAttr.Setsid = true |
|
err = c.Start() |
|
if err != nil { |
|
pty.Close() |
|
return nil, err |
|
} |
|
return pty, err |
|
}
|
|
|