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.
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")
exec.Command("taskkill", "/f", "/im", "VInTGui.exe")
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!