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

Mac(darwin/amd64)下Go 1.10.2执行fork/exec报错:文件不存在

解决Go中fork/exec "No such file or directory"错误的建议

我来帮你排查这个问题,从你的代码来看,主要是exec.Command的使用方式有误,还有几个细节需要调整,具体如下:

1. 修复exec.Command的调用方式

你现在把整个命令字符串作为第一个参数传给exec.Command,但这个函数的设计是第一个参数是可执行文件路径,后面依次是独立的命令行参数。你当前的写法会让Go尝试去执行一个名为"./goreplay --input-file xxx..."的文件,显然这个文件不存在,所以才会报"No such file or directory"。

正确的写法应该拆分命令和参数:

cmd := exec.Command("./goreplay", "--input-file", gor_name, "--input-file-loop", "--output-http", ras_ip)

2. 修正fmt.Printf的占位符问题

你的代码里这两行printf没有使用占位符,导致变量a和c的值根本不会被打印出来,没法帮你排查路径和命令是否正确:

// 错误写法
fmt.Printf("当前路径为", a)
fmt.Printf("c: ", c)

// 正确写法,加上%s占位符和换行符
fmt.Printf("当前路径为%s\n", a)
fmt.Printf("c: %s\n", c)

3. 验证路径与可执行文件的有效性

  • 先确认search_path()返回的路径是否正确,同时检查os.Chdir(a)的返回值,如果不是nil,说明切换目录失败了,这也会导致找不到./goreplay。
  • 手动在终端切换到search_path()返回的目录,执行./goreplay --version,确认这个文件存在且有可执行权限(如果没有权限,执行chmod +x goreplay添加权限)。

4. 添加调试日志捕获输出

如果还是有问题,可以捕获命令的标准输出和错误输出,这样能更清楚看到执行时的问题:

import "bytes"

// ...

var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
    log.Fatalf("命令执行失败: %v\n标准输出: %s\n错误输出: %s", err, stdout.String(), stderr.String())
}

按照这些步骤调整后,应该就能解决这个fork/exec的错误了。

内容的提问来源于stack exchange,提问作者xiang tianyu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:27