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 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)

}

}

以上是 golang exec.Command读取标准输入 的全部内容, 来源链接: utcz.com/qa/416219.html

回到顶部