我有一个应该调用ruby脚本的go程序。
我有一个runCommand功能:
runCommand
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\n", err.Error()) os.Exit(1) } }
我这样调用它:
runCommand("ruby", "-e", "require 'foo'")
它适用于大多数情况,除非gets子进程中有一个或任何类似的操作需要暂停输入。
gets
我已经尝试设置cmd.Stdin = os.Stdin,但是它不等待输入。
cmd.Stdin = os.Stdin
我究竟做错了什么?
下面的程序好像你问什么(我runCommand几乎等同于你的。我只是改变了=到:=了err线。)你在做一些不同的东西?
=
:=
err
package main import ( "fmt" "os" "os/exec" ) func main() { runCommand("ruby", "-e", `puts "Running"; $in = gets; puts "You said #{$in}"`) } 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\n", err.Error()) os.Exit(1) } }