Maison >développement back-end >Golang >Comment puis-je empêcher l'apparition de la fenêtre d'invite de commande lors de l'utilisation de « exec.Command() » dans Go ?
Dans Go, la fonction exec.Command() peut être utilisée pour exécuter des commandes externes. Cependant, par défaut, cette fonction affiche la fenêtre d'invite de commande pendant l'exécution de la commande. Pour empêcher cette fenêtre d'apparaître, vous pouvez définir le champ HideWindow de syscall.SysProcAttr sur true.
package main import ( "log" "os" "syscall" "github.com/pkg/exec" ) func main() { process := exec.Command("cmd", "/c", "dir") process.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} err := process.Start() if err != nil { log.Print(err) } process.Wait() // Wait for the command to finish before exiting. }
Cependant, cette méthode peut ne pas toujours fonctionner, surtout lorsqu'elle est utilisée sous Windows. Même avec HideWindow défini sur true, la fenêtre de commande peut encore apparaître brièvement.
Une solution plus fiable consiste à utiliser l'appel système pour créer un nouveau processus avec l'indicateur SW_HIDE. Cela garantit que le nouveau processus s'exécute sans fenêtre visible.
package main import ( "log" "os" "os/exec" "syscall" ) func main() { cmdPath, _ := exec.LookPath("cmd") si := syscall.StartupInfo{ Flags: syscall.STARTF_USESHOWWINDOW, CreationFlags: 0x00000008, // SW_HIDE } pi := syscall.ProcessInformation{} _, _, err := syscall.CreateProcess(cmdPath, syscall.Syscall0(uintptr(len(cmdPath))), nil, nil, false, syscall.CREATE_NEW_CONSOLE, 0, nil, &si, &pi) if err != nil { log.Fatal(err) } syscall.CloseHandle(pi.Thread) syscall.CloseHandle(pi.Process) os.Exit(0) }
Avec cette méthode, la fenêtre d'invite de commande n'apparaîtra pas du tout lorsque exec.Command() est appelé.
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!