我想执行使用exec
包find
Windows命令,但Windows正在做一些奇怪的转义。
我有这样的: out, err := exec.Command("find", `"SomeText"`).Output()
但是这是抛出错误,因为Windows正在转换这find /SomeText"
有谁知道为什么? 我如何使用exec包在Windows上执行find
?
谢谢!
好吧,这比您预期的要复杂一点,但有一个解决方案:
package main import ( "fmt" "os/exec" "syscall" ) func main() { cmd := exec.Command(`find`) cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt` out, err := cmd.Output() fmt.Printf("%s\n", out) fmt.Printf("%v\n", err) }
不幸的是, 虽然在2011年增加了对此的支持 ,但似乎尚未将其纳入文档 。 (虽然也许我只是不知道在哪里看。)
供参考,运行:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("find", `"SomeText"`) fmt.Printf("Path: %q, args[1]: %q\n", cmd.Path, cmd.Args[1]) }
操场
在Unix上给出:
Path: "/usr/bin/find", args[1]: "\"SomeText\""
并交叉编译到Windows并运行在Win7上:
Path: "C:\\Windows\\system32\\find.exe", args[1]: "\"SomeText\""
两者对我来说都是正确的。
向Windows交叉编译添加out, err := cmd.Output()
,为fmt.Printf("%#v\%v\n", err, err)
提供了以下内容:
&exec.ExitError{ProcessState:(*os.ProcessState)(0xc0820046a0)} exit status 1
但我想这只是因为找不到任何东西。