Heim  >  Artikel  >  Backend-Entwicklung  >  Verwirrend unterschiedliche Ergebnisse zwischen der Verwendung von os/exec und der Ausführung über die Befehlszeile

Verwirrend unterschiedliche Ergebnisse zwischen der Verwendung von os/exec und der Ausführung über die Befehlszeile

王林
王林nach vorne
2024-02-14 12:45:09911Durchsuche

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

Der PHP-Editor Zimo liefert Ihnen eine Analyse der verblüffend unterschiedlichen Ergebnisse, die auftreten, wenn Sie die Funktion os/exec in PHP verwenden und Befehle auf der Befehlszeile ausführen. In praktischen Anwendungen kann es vorkommen, dass ein Befehl, der erfolgreich auf der Befehlszeile ausgeführt werden kann, bei Verwendung der Funktion os/exec nicht das gleiche Ergebnis erzielen kann. Diese Situation verwirrt uns oft und es fällt uns schwer, eine Lösung dafür zu finden. In diesem Artikel werden die Gründe für Sie analysiert und Lösungen bereitgestellt, die Ihnen helfen, die OS/Exec-Funktion besser zu verstehen und anzuwenden.

Frageninhalt

Ich habe mit dem Paket os/exec ein Programm zum Ausführen von Befehlen in Golang geschrieben.

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

Wenn ich das Programm starte, wird Folgendes gedruckt: err: exit status 1

Aber wenn ich den Befehl taskkill /f /im vintgui.exe in der Windows-Befehlszeile ausführe. Es funktionierte.

Warum führt die Ausführung von Befehlen über das os/exec包运行命令和直接通过windows命令行(使用相同用户相同权限)运行命令有不同的结果?如何修复我的程序?

解决方法

解决方案是使用 command 对象的 stderr-Paket zu anderen Ergebnissen als die direkte Ausführung von Befehlen über die Windows-Befehlszeile (unter Verwendung desselben Benutzers mit denselben Berechtigungen)? Wie kann ich mein Programm reparieren?

Problemumgehung

Die Lösung besteht darin, die Eigenschaft stderr des Objekts command zu verwenden. Das geht so:

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

Ändern Sie sich einfach entsprechend Ihrer Situation

exec.command("taskkill", "/f /im vintgui.exe")
🎜zu🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
🎜Kombinieren Sie nicht alle Parameter in einer Zeichenfolge. 🎜

Das obige ist der detaillierte Inhalt vonVerwirrend unterschiedliche Ergebnisse zwischen der Verwendung von os/exec und der Ausführung über die Befehlszeile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen