从Go执行第三方二进制文件

时间:2013-06-30 09:29:34

标签: go

我在Go中做了一个小小的黑客,因为我需要使用动态标志运行第三方可执行文件(这取决于服务器设置和一些硬件规格,每台机器上每次都不同)。

我正在使用一些简洁的库来帮助我找出Go可执行文件所在的路径。第三方二进制文件与Go one相同。

  path, err := osext.ExecutableFolder()
  if err != nil {
    log.Fatal(err)
  }
  path += "3rdparty.exe"

我运行fmt的Sprintf方法,将路径和标志放入名为Command的单个字符串中。

我试着像这样调用它:

out, err := exec.Command(Command).Output()
  if err != nil {
    fmt.Println("Command execution failed:", err)
  }

然而,错误不是零。我无法复制vmware的错误(设置窗口只是为了编译和测试),但它是这样的: Command execution failed: "C:\\PATH\\TO\\3rdparty.exe --flags-omitted" file does not exist

然而,当我将C:\\PATH\\TO\\3rdparty.exe --flags-omitted复制到cmd时,它运行得很好。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

该命令及其参数必须是单独的字符串,不要将它们连接成一个字符串。

仔细看看,实际的错误消息是清除它(注意引号所在的位置):

Command execution failed: "C:\\PATH\\TO\\3rdparty.exe --flags-omitted" file does not exist