一尘不染

在Windows上使用exec.Command进行Noverify

go

我想使用VKCOM /
noverify来分析代码。使用此命令从命令行(Windows dos
shell)调用它

 noverify.exe -exclude-checks arraySyntax,phpdocLint 
              -output result.txt 
              C:\Dev\PHP\ResourceSpace_9_0_13357\include

问题是我无法将参数传递给 cmnd := exec.Command("noverify.exe", args)

options := " -exclude-checks arraySyntax, PHPDoc"
pathToCode := "C:\\Dev\\PHP\\ResourceSpace_9_0_13357\\include"

// this works
cmnd := exec.Command("noverify.exe", pathToCode)


args := []string{options, pathToCode}
arg := strings.Join(args, "")
// passing options does not work
// cmnd := exec.Command("noverify.exe", arg)

b, err := cmnd.CombinedOutput()

我尝试了什么

您可以在此摘要中找到我的源代码。,尽管分隔符在上方为空,但似乎args是以字符串分隔的形式加入的。

问题

  1. 如何将多个参数传递给 exec.Comman("yourFoo.exe", cmdArgs...)
  2. 为什么我的尝试在Windows上不起作用?

阅读 685

收藏
2020-07-02

共1个答案

一尘不染

有多个选项可以将参数传递给exec.Command:

您可以使用multible字符串作为参数:

cmd := exec.Command("your-command", "arg1", "arg2")

如果您有一部分参数,则可以使用传播运算符

args := []string{"-exclude-checks", "arraySyntax,phpdocLint", "-output", "result.txt", "your-path"}
cmd := exec.Command("your-command", args...)

问题二:在您的代码中

options := " -exclude-checks arraySyntax, PHPDoc"
pathToCode := "C:\\Dev\\PHP\\ResourceSpace_9_0_13357\\include"

args := []string{options, pathToCode}

您将两个选项传递给外部程序。如果您在命令行上写了相同的内容,则可以通过

your-command.exe " -exclude-checks arraySyntax, PHPDoc" "your-path"

这不起作用,也是您的程序不起作用的原因。

简而言之,无论您在命令中的哪个位置放置空格,都需要为设置一个单独的参数exec.Command。该示例也这样做。

2020-07-02