当前位置: 首页 > 面试题库 >

golang exec.Command读取标准输入

诸正谊
2023-03-14
问题内容

我有一个应该调用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)
    }
}


 类似资料:
  • 本文向大家介绍OCaml 从标准输入读取并打印到标准输出,包括了OCaml 从标准输入读取并打印到标准输出的使用技巧和注意事项,需要的朋友参考一下 示例 我们准备一个包含reverser.ml以下内容的文件: 然后,我们使用以下命令编译程序: 我们通过将数据传递到新的可执行文件进行测试: 该reserver.ml程序以命令式风格编写。虽然命令式样式很好,但是将其与功能翻译进行比较很有趣: 由于引入

  • 问题内容: 如何使用Go中的函数从标准输入获取整数输入? 如果使用无法完成此操作,那么读取单个整数的最佳方法是什么? 问题答案: http://golang.org/pkg/fmt/#Scanf Go中包含的所有库都有充分的文档记录。 话虽如此,我相信 绝招

  • 我最近想出了如何在汇编中写入 stdout,但现在无法从 stdin 中读取,并将我读取的内容输出回 stdout。这是我到目前为止的代码: 我很确定我看错了。我很确定和的行为没有达到预期(如果我将 替换为 次),这是导致我的问题的原因(当我输入输入并点击return时,它什么也不显示)。 我已经摸索了一段时间了,希望能得到任何帮助。(我这么做只是为了了解这不是家庭作业)。 我的问题本质上是我做错

  • 问题内容: 从标准输入逐行读取的Scala配方是什么?类似于等效的Java代码: 问题答案: 最直接的前瞻性的方式将只使用它的一部分。但是,这很丑陋,因为您需要检查最终的空值: 这太冗长了,您宁可使用它。 我认为将使用更漂亮的方法:

  • 我正在学习Sedgwick(普林斯顿大学)的算法1课程,试图从标准输入中读取一个整数,它表示将要输入的整数对的数量,然后从标准输入中读取一个整数对的列表。 例如: 视频中给出的代码是这样的: 问题: > 中的代码是stdin.readint()实际的java还是伪代码?

  • 问题内容: 是否可以在Python 2.6中将stdin读取为二进制数据?如果是这样,怎么办? 我在Python 3.1文档中 看到这很简单,但是在2.6中执行此操作的工具似乎并不存在。 如果3.1中描述的方法不可用,是否有办法关闭stdin并以二进制模式重新打开? 更新资料 为了清楚起见,我在MS-DOS外壳程序中使用“类型”将二进制文件的内容传递给我的python代码。据我了解,这应该等效于U