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

Go跨平台命令执行:自动/手动处理Y/n确认输入的方案问询

Go执行交互式命令的跨平台解决方案

方案一:自动完成确认(自动发送Y+回车)

原代码仅捕获了子命令的标准输出,未处理标准输入,导致子命令等待用户输入时因无数据流入而异常终止。要实现自动确认,需将子命令的Stdin关联到写入管道,并监听输出在合适时机发送确认输入:

package main

import (
	"bufio"
	"fmt"
	"os/exec"
	"runtime"
	"strings"
)

func getShell() string {
	if runtime.GOOS == "windows" {
		return "powershell"
	}
	return "bash"
}

func AutoConfirmCommand(command string) error {
	cmd := exec.Command(getShell(), "-c", command)

	// 创建stdin、stdout管道
	stdin, err := cmd.StdinPipe()
	if err != nil {
		return err
	}
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		return err
	}

	// 启动子命令
	if err := cmd.Start(); err != nil {
		return err
	}

	// 异步监听输出,检测到确认提示时发送Y+回车
	go func() {
		scanner := bufio.NewScanner(stdout)
		for scanner.Scan() {
			line := scanner.Text()
			fmt.Println(line)
			// 匹配确认提示关键词(不区分大小写)
			if strings.Contains(strings.ToLower(line), "do you want to continue") {
				_, _ = stdin.Write([]byte("y\n"))
				stdin.Close()
			}
		}
	}()

	// 等待命令执行完成
	return cmd.Wait()
}

func main() {
	if err := AutoConfirmCommand("stencil download"); err != nil {
		fmt.Printf("命令执行失败: %v\n", err)
	}
}

关键说明:

  • 通过StdinPipe获取子命令的输入管道,在检测到确认提示时写入y\n完成自动确认
  • 用goroutine异步监听输出,避免阻塞主流程
  • 依赖getShell函数适配Windows和类Unix系统的shell环境

方案二:允许用户手动输入确认

如果需要让用户直接与子命令交互,只需将子命令的标准输入、输出、错误流直接绑定到当前进程的对应流,用户即可在终端直接输入确认信息:

package main

import (
	"fmt"
	"os"
	"os/exec"
	"runtime"
)

func getShell() string {
	if runtime.GOOS == "windows" {
		return "powershell"
	}
	return "bash"
}

func InteractiveCommand(command string) error {
	cmd := exec.Command(getShell(), "-c", command)

	// 将子命令的IO与当前进程的标准IO绑定
	cmd.Stdin = os.Stdin
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	// 启动并等待命令执行完成
	return cmd.Run()
}

func main() {
	if err := InteractiveCommand("stencil download"); err != nil {
		fmt.Printf("命令执行失败: %v\n", err)
	}
}

关键说明:

  • cmd.Stdin = os.Stdin让子命令直接读取用户的终端输入
  • cmd.Stdout和cmd.Stderr绑定后,子命令的输出会直接打印到终端
  • 完全跨平台,无需额外处理不同系统的交互逻辑

内容的提问来源于stack exchange,提问作者Isaac Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:30:56