duanchuang3182 2019-09-02 23:37
浏览 329

在Windows上使用exec.Command进行Noverify

I want to use VKCOM/noverify to analyse code. Calling it from the command-line (windows dos shell) using this command works

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

The trouble is that i am unable to pass arguments to 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()

What have i tried

You can find my source code in this gist It seems that args are joined as a string seperated by , despite that the separator is empty above.

Questions

  1. How to pass multiple arguments to exec.Comman("yourFoo.exe", cmdArgs...)
  2. Why is my attempt not working on windows?
  • 写回答

1条回答 默认 最新

  • duanfu9523 2019-09-03 07:14
    关注

    There are multible options to pass arguments to exec.Command:

    You can use multible strings as arguments:

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

    If you have a slice of arguments, you can use the spread operator

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

    To question two: In your code

    options := " -exclude-checks arraySyntax, PHPDoc"
    pathToCode := "C:\\Dev\\PHP\\ResourceSpace_9_0_13357\\include"
    
    args := []string{options, pathToCode}
    

    you're passing two options to the external program. If you wrote the same on the command line, you pass

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

    This doesn't work, and is also the reason your program doesn't work.

    In short, whereever you put a space between in a command, you need to have a separate argument to exec.Command. The example also does this.

    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备