github.com/rentongzhang/docker@v1.8.2-rc1/daemon/execdriver/termconsole.go (about)

     1  package execdriver
     2  
     3  import (
     4  	"io"
     5  	"os/exec"
     6  )
     7  
     8  type StdConsole struct {
     9  }
    10  
    11  func NewStdConsole(processConfig *ProcessConfig, pipes *Pipes) (*StdConsole, error) {
    12  	std := &StdConsole{}
    13  
    14  	if err := std.AttachPipes(&processConfig.Cmd, pipes); err != nil {
    15  		return nil, err
    16  	}
    17  	return std, nil
    18  }
    19  
    20  func (s *StdConsole) AttachPipes(command *exec.Cmd, pipes *Pipes) error {
    21  	command.Stdout = pipes.Stdout
    22  	command.Stderr = pipes.Stderr
    23  
    24  	if pipes.Stdin != nil {
    25  		stdin, err := command.StdinPipe()
    26  		if err != nil {
    27  			return err
    28  		}
    29  
    30  		go func() {
    31  			defer stdin.Close()
    32  			io.Copy(stdin, pipes.Stdin)
    33  		}()
    34  	}
    35  	return nil
    36  }
    37  
    38  func (s *StdConsole) Resize(h, w int) error {
    39  	// we do not need to reside a non tty
    40  	return nil
    41  }
    42  
    43  func (s *StdConsole) Close() error {
    44  	// nothing to close here
    45  	return nil
    46  }