Heim > Backend-Entwicklung > Golang > 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

王林
Freigeben: 2024-02-14 12:45:09
nach vorne
977 Leute haben es durchsucht

使用 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)
    }
}
Nach dem Login kopieren

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())
Nach dem Login kopieren

Ändern Sie sich einfach entsprechend Ihrer Situation

exec.command("taskkill", "/f /im vintgui.exe")
Nach dem Login kopieren
🎜zu🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
Nach dem Login kopieren
🎜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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage