Maison > développement back-end > Golang > 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

王林
Libérer: 2024-02-14 12:45:09
avant
976 Les gens l'ont consulté

使用 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)
    }
}
Copier après la connexion

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())
Copier après la connexion

Selon votre situation, changez simplement

exec.command("taskkill", "/f /im vintgui.exe")
Copier après la connexion
🎜à🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
Copier après la connexion
🎜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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal