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

如何在Go中传递多个命令?

柯鸿云
2023-03-14
问题内容

如何在Go中将多个外部命令通过管道传递?我已经试过了这段代码,但是看到一条错误消息exit status 1

package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    c1 := exec.Command("ls")
    stdout1, err := c1.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }

    if err = c1.Start(); err != nil {
        log.Fatal(err)
    }
    if err = c1.Wait(); err != nil {
        log.Fatal(err)
    }

    c2 := exec.Command("wc", "-l")
    c2.Stdin = stdout1

    stdout2, err := c2.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }

    if err = c2.Start(); err != nil {
        log.Fatal(err)
    }
    if err = c2.Wait(); err != nil {
        log.Fatal(err)
    }

    io.Copy(os.Stdout, stdout2)
}

问题答案:

StdoutPipe返回一条管道,该管道将在命令启动时连接到命令的标准输出。在Wait看到命令退出后,管道将自动关闭。

(来自http://golang.org/pkg/os/exec/#Cmd.StdinPipe)

您确实c1.Wait关闭了事实stdoutPipe

我做了一个工作示例(只是一个演示,添加了错误捕获功能!):

package main

import (
    "bytes"
    "io"
    "os"
    "os/exec"
)

func main() {
    c1 := exec.Command("ls")
    c2 := exec.Command("wc", "-l")

    r, w := io.Pipe() 
    c1.Stdout = w
    c2.Stdin = r

    var b2 bytes.Buffer
    c2.Stdout = &b2

    c1.Start()
    c2.Start()
    c1.Wait()
    w.Close()
    c2.Wait()
    io.Copy(os.Stdout, &b2)
}


 类似资料:
  • 问题内容: 我一直在尝试运行命令并解析golang中的输出。这是我正在尝试做的一个示例: 包主 现在,当我尝试运行“ ls -ltr”时,出现以下错误: 因此,基本上,go在PATH中寻找整个“ ls -ltr”。而且显然不存在。我可以通过任何方式将标志传递给任何参数吗?TIA。 问题答案: 您可以通过将更多参数传递给函数来将参数传递给程序-它是可变的: https://golang.org/pk

  • 问题内容: 我试图弄清楚如何在URL中传递多个参数。我想将纬度和经度从我的android类传递给Java servlet。我怎样才能做到这一点? 在这种情况下,输出(写入文件)为。这是可行的,但我想在两个单独的参数中传递纬度和经度,以便减少在服务器端的工作。如果不可能,我如何至少在&之间添加一个空格,以便可以使用class获取经度和纬度。我试过以下行,但无济于事。 我的servlet代码如下: 我

  • 本文向大家介绍在 mapper 中如何传递多个参数?相关面试题,主要包含被问及在 mapper 中如何传递多个参数?时的应答技巧和注意事项,需要的朋友参考一下 1、第一种:   2、第二种:使用 \@param 注解:   然后,就可以在 xml 像下面这样使用(推荐封装为一个 map,作为单个参数传递给mapper)   3、第三种:多个参数封装成 map

  • 问题内容: 我想将两个数据对象传递给Go Template。一个是MongoDB查询结果,另一个是整数数组。 MongoDB查询: 我想通过以下代码发送“结果”和一个int数组 如果只有db结果,我们可以将其用作 在模板中,我们可以访问它{{.Name}}等(其中Name是[] User的结构字段) 请告诉我如何传递这些数据以及如何在模板中访问它们。 问题答案: 你可以仅通过一个单一的值,但该值可

  • 我需要向maven命令行传递多个参数来运行Spring Boot应用程序。这就是我在spring Boot中传递命令行参数的方式。我使用的是spring boot 2.2.6版本 参数似乎没有正确解析

  • 问题内容: 如何通过通知发送数字和字符串… 并在接收器中接收值? 问题答案: 您可以将它们包装在或或自定义对象中。 例如: