使用os/exec和在命令行执行之间的结果不可思议地不同



我写了一个程序,在Golang中运行一个命令使用包os/exec

import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("taskkill", "/f /im VInTGui.exe")
err := cmd.Run()
if err != nil {
fmt.Printf("err: %vn", err)
}
}

当我运行该程序时,它显示:err: exit status 1

但是当我在Windows命令行中运行命令taskkill /f /im VInTGui.exe时。它成功。

为什么通过os/exec包执行命令和直接通过Windows Command Line执行命令(使用同一用户相同权限)结果不同?我如何修复我的程序?

解决方案是使用Command对象的Stderr属性。可以这样做:

cmd := exec.Command("taskkill", "/f /im VInTGui.exe")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
fmt.Printf("%v: %sn", err, stderr.String())
return
}
fmt.Println("Result: " + out.String())

在您的情况下,只需更改

exec.Command("taskkill", "/f /im VInTGui.exe")

exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")

不要将所有参数合并到一个字符串中。

最新更新