You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让代码自动响应命令行交互以完成代码生成测试?

解决代码生成器自动输入"yes"的问题

你之前尝试的exec.Command("yes").Output()或直接操作Stdout的方式无效,核心原因是没把yes的输出关联到代码生成器命令的输入流上。正确的做法是通过标准输入管道主动向生成器命令写入所需输入,具体实现如下:

示例代码(Go语言)

package main

import (
    "io"
    "os/exec"
)

func main() {
    // 替换为你的代码生成器命令及对应参数
    generatorCmd := exec.Command("your-code-generator", "generate-grpc-client")

    // 获取生成器命令的标准输入管道
    stdin, err := generatorCmd.StdinPipe()
    if err != nil {
        panic(err)
    }

    // 启动生成器进程(此时命令会进入等待输入的状态)
    if err := generatorCmd.Start(); err != nil {
        panic(err)
    }

    // 向生成器输入"yes"并添加换行符(模拟终端回车提交输入)
    _, err = io.WriteString(stdin, "yes\n")
    if err != nil {
        panic(err)
    }
    stdin.Close() // 关闭输入流,告知生成器输入已完成

    // 等待命令执行结束,获取合并的标准输出与错误输出
    output, err := generatorCmd.CombinedOutput()
    if err != nil {
        panic(err)
    }
    println(string(output))
}

关键注意点

  1. 输入流关联:必须通过StdinPipe()获取目标命令的输入流,单独运行yes命令只会向当前终端输出,无法关联到生成器进程的输入。
  2. 启动后再写入:先调用Start()启动生成器进程,待其进入等待输入状态后,写入的内容才会被正确接收。
  3. 换行符不可缺:命令行交互通常以回车(即\n)作为输入提交的标志,写入时必须添加换行符。
  4. 关闭输入流:写入完成后关闭stdin,避免生成器一直等待后续输入而无法继续执行。

内容的提问来源于stack exchange,提问作者Alex Rekunch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:01