1234567891011121314151617181920212223242526272829303132 |
- 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
- }
|