littleBall00 2022-05-01 21:30 采纳率: 0%
浏览 66
已结题

go使用os/exec执行cmd命令,使用echo实现管道

go使用os/exec执行cmd命令,使用echo实现管道自动化交互操作失败

terraform appply命令在执行过程中,会有一个需要输入 yes 的二次确认。在下面的Apply函数中,希望使用echo命令来实现管道操作。T.T请问我该怎么改才能正确实现这一步操作……T.T

问题相关代码,请勿粘贴截图
func Apply() error {
    c1 := exec.Command("terraform", "apply")
    c2 := exec.Command("cmd", "echo yes")
    c2.Stdin, _ = c1.StdoutPipe()
    c2.Stdout = os.Stdout
    var stdo1, stdo2, stderr1, stderr2 bytes.Buffer
    c1.Stdout = &stdo1
    c1.Stderr = &stderr1
    c2.Stdout = &stdo2
    c2.Stderr = &stderr2

    e2 := c2.Start()
    e1 := c1.Run()
    _ = c2.Wait()
    outStr1, errStr1, outStr2, errStr2 := string(stdo1.Bytes()), string(stderr1.Bytes()),
        string(stdo2.Bytes()), string(stderr2.Bytes())
    fmt.Printf("out:\n%s\n", outStr1)
    if e1 != nil {
        // 执行错误处理
        fmt.Println("cmd run failed:\n", errStr1)
        return errors.New(e1.Error())
    } else {
        fmt.Printf("out:\n%s\n", outStr2)
        if e2 != nil {
            // 执行错误处理
            fmt.Println("cmd run failed:\n", errStr2)
            return errors.New(e2.Error())
        }
    }
    return nil
}

运行结果及报错内容

img

  • 写回答

1条回答 默认 最新

  • 歇歇 2022-05-02 01:02
    关注

    这里有一篇文章描述了在CI中运行Terraform的规范方式:在自动化中运行Terraform
    https://learn.hashicorp.com/tutorials/terraform/automate-terraform

    评论

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛