golang exec.Command读取标准输入
我有一个应该调用ruby脚本的go程序。
我有一个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
子进程中有一个或任何类似的操作需要暂停输入。
我已经尝试设置cmd.Stdin = os.Stdin
,但是它不等待输入。
我究竟做错了什么?
回答:
下面的程序好像你问什么(我runCommand
几乎等同于你的。我只是改变了=
到:=
了err
线。)你在做一些不同的东西?
package mainimport (
"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)
}
}
以上是 golang exec.Command读取标准输入 的全部内容, 来源链接: utcz.com/qa/416219.html