2025-07-22 深度解析exec.Run执行带参数命令时遭遇EOF问题的解决方案 深度解析exec.Run执行带参数命令时遭遇EOF问题的解决方案 一、问题现象:诡异的EOF错误上周在实现一个自动化部署工具时,我遇到了一个令人费解的问题——当尝试通过exec.Run执行一个需要交互式输入的Python脚本时,程序总是莫名其妙地返回EOF错误。更奇怪的是,同样的命令在终端手动执行却完全正常。go cmd := exec.Command("python3", "interactive_script.py", "--input=test") output, err := cmd.CombinedOutput() // 此处抛出EOF这个看似简单的任务,让我花了整整两天时间排查。通过深入源码分析和大量实验,终于揭开了这个"幽灵问题"的真面目。二、问题根源:标准输入流的生命周期经过反复测试和查阅源码,发现问题出在标准输入流的管理机制上。当使用exec.Run执行命令时: 参数传递机制:Go会将命令行参数转换为C-style的字符串数组 标准流处理:默认会创建三个管道(stdin/stdout/stderr) 隐式关闭时机:当主进程认为"不需要再输入"时会主动关闭stdin管道 关键在于:某些命令行工具(如Python、Node)会持续... 2025年07月22日 3 阅读 0 评论