github.com/lingyao2333/mo-zero@v1.4.1/core/iox/pipe.go (about)

     1  package iox
     2  
     3  import "os"
     4  
     5  // RedirectInOut redirects stdin to r, stdout to w, and callers need to call restore afterwards.
     6  func RedirectInOut() (restore func(), err error) {
     7  	var r, w *os.File
     8  	r, w, err = os.Pipe()
     9  	if err != nil {
    10  		return
    11  	}
    12  
    13  	ow := os.Stdout
    14  	os.Stdout = w
    15  	or := os.Stdin
    16  	os.Stdin = r
    17  	restore = func() {
    18  		os.Stdin = or
    19  		os.Stdout = ow
    20  	}
    21  
    22  	return
    23  }