Maison  >  Article  >  développement back-end  >  Des résultats étonnamment différents entre l'utilisation de os/exec et l'exécution à partir de la ligne de commande

Des résultats étonnamment différents entre l'utilisation de os/exec et l'exécution à partir de la ligne de commande

王林
王林avant
2024-02-14 12:45:09911parcourir

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

L'éditeur PHP Zimo vous propose une analyse des résultats étonnamment différents qui se produisent lors de l'utilisation de la fonction os/exec en PHP et de l'exécution de commandes sur la ligne de commande. Dans les applications pratiques, nous pouvons rencontrer une situation où une commande qui peut être exécutée avec succès sur la ligne de commande ne peut pas obtenir le même résultat lors de l'utilisation de la fonction os/exec. Cette situation nous laisse souvent confus et difficile à trouver une solution. Cet article analysera vos raisons et vous proposera des solutions pour vous aider à mieux comprendre et appliquer la fonction os/exec.

Contenu de la question

J'ai écrit un programme pour exécuter des commandes dans Golang à l'aide du package 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)
    }
}

Lorsque je lance le programme, il affiche : err: exit status 1

Mais quand j'exécute la commande taskkill /f /im vintgui.exe dans la ligne de commande Windows. Ça a marché.

Pourquoi l'exécution de commandes via le package os/exec包运行命令和直接通过windows命令行(使用相同用户相同权限)运行命令有不同的结果?如何修复我的程序?

解决方法

解决方案是使用 command 对象的 stderr a-t-elle des résultats différents de l'exécution de commandes directement via la ligne de commande Windows (en utilisant le même utilisateur et les mêmes autorisations) ? Comment puis-je réparer mon programme ?

Solution

La solution consiste à utiliser la propriété stderr de l'objet command. Cela peut être fait comme ceci :

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())

Selon votre situation, changez simplement

exec.command("taskkill", "/f /im vintgui.exe")
🎜à🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
🎜Ne combinez pas tous les paramètres en une seule chaîne. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer