登录
首页 >  Golang >  Go问答

如何将用户输入复制到子进程的标准输入?

来源:stackoverflow

时间:2024-03-22 20:57:19 202浏览 收藏

在执行子进程时复制用户输入时遇到困难?本文提供了一种解决方案,通过捕获用户输入并将其传递给子进程,解决了无法从 `cmd.stdin` 获取输入副本的问题。该解决方案通过 `cmd.StdinPipe()` 创建一个管道,将用户输入流式传输到子进程的标准输入中。

问题内容

我需要在子进程执行期间复制用户为子进程提供的所有输入。我尝试扫描 cmd.stdin 以获取输入副本,但无法获取它。我在这里遗漏了什么吗?

func main(){
  cmd:= exec.Command("python", "-i")
  cmd.Stdin = os.Stdin
  cmd.Stdout = os.Stdout
  cmd.Stderr = os.Stderr

  buff := bufio.NewScanner(cmd.Stdin)

  go func(){
    for buff.Scan(){
      fmt.Println(buff.Text())
    }
  }()

  _ = cmd.Run()  
}

解决方案


我认为您实际上需要捕获输入,并将其传递给子进程...

func main(){
  cmd := exec.Command("python", "-i")
  stdin, err := cmd.StdinPipe()
  if err != nil {
      panic(err)
  }
  cmd.Stdout = os.Stdout
  cmd.Stderr = os.Stderr

  buff := bufio.NewScanner(os.Stdin)

  go func(){
    for buff.Scan(){
      input := buff.Text()
      fmt.Println(input)
      io.WriteString(stdin, input)
    }
  }()

  cmd.Start()  
  cmd.Wait()
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>