我用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: %v\n", err)
    }
}

当我运行该程序时,它打印出:err: exit status 1

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

为什么通过包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: %s\n", err, stderr.String())
    return
}
fmt.Println("Result: " + out.String())

对你来说,只要改变就行了

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

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

Don't merge all arguments 至 one string.

Go相关问答推荐

Go Net/http路由

CGO Linux到Windows交叉编译中的未知类型名称

Go SQLCMD比Windows本机版本慢吗?

关于如何使用 Service Weaver 设置多个不同侦听器的问题

Prometheus 摘要分位数错误

通过 Terraform 中的 MapNestedAtribute 进行迭代

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

以编程方式取消 pyspark dataproc 批处理作业(job)

Go test "-run -" 标志执行测试更快

Kubo,来自 IpfsNode.Bootstrap 的无效内存地址或零指针取消引用

将 firestoreinteger_value转换为整数

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

通过环境变量配置 OTLP 导出器

致命错误:找不到由 zergon321/reisen 引起的libavcodec/avcodec.h文件

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

Golang Gin 绑定请求正文 XML 到 Slice

为什么import和ImportSpec之间可以出现多行注释,而PackageName和ImportPath之间不能出现?

golang 如何从字符串中查找表情符号?

gqlgen go,通过添加一个解析器来减少数据库调用

Beego - 我需要context.Context而不是 Beego 上下文