最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 使用 os/exec 和在命令行执行之间出现令人费解的不同结果

    使用 os/exec 和在命令行执行之间出现令人费解的不同结果

    php小编子墨为您带来关于在PHP中使用os/exec函数和在命令行中执行命令时出现的令人费解的不同结果的解析。在实际应用中,我们可能会遇到在命令行中能够成功执行的命令,在使用os/exec函数时却无法得到相同的结果的情况。这种情况往往会让我们感到困惑,并且难以找到解决办法。本文将为您解析其中的原因,并提供解决方案,以帮助您更好地理解和应用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 对象的 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")
    

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

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 使用 os/exec 和在命令行执行之间出现令人费解的不同结果
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情