dqydp44800
2015-05-13 06:16
浏览 702
已采纳

golang exec.Command读取标准输入

I have a go program that should invoke a ruby script.

I have a runCommand function:

func runCommand(cmdName string, arg ...string) {
    cmd := exec.Command(cmdName, arg...)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Stdin = os.Stdin
    err = cmd.Run()
    if err != nil {
        fmt.Printf("Failed to start Ruby. %s
", err.Error())
        os.Exit(1)
    }
}

I invoke it like this:

runCommand("ruby", "-e", "require 'foo'")

It works for most cases, except if there is a gets or any similar operation in the child process that needs to pause for an input.

I have tried setting cmd.Stdin = os.Stdin, but it does not wait for input.

What am I doing wrong?

图片转代码服务由CSDN问答提供 功能建议

我有一个可以调用ruby脚本的go程序。

I 具有 runCommand 函数:

  func runCommand(cmdName字符串,arg ... string){
 cmd:= exec.Command(cmdName,  arg ...)
 cmd.Stdout = os.Stdout 
 cmd.Stderr = os.Stderr 
 cmd.Stdin = os.Stdin 
 err = cmd.Run()
如果err!= nil {\  n fmt.Printf(“无法启动Ruby。%s 
”,err.Error())
 os.Exit(1)
} 
} 
   
 \  n 

我这样调用它:

  runCommand(“ ruby​​”,“ -e”,“ require'foo'”)
   
 
 

在大多数情况下都可以使用,除非子进程中有 gets 或任何类似的操作需要暂停输入。

我尝试设置 cmd.Stdin = os.Stdin ,但是它不等待输入。

我在做什么错?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题