Go에서는 exec.Command() 함수를 사용하여 외부 명령을 실행할 수 있습니다. 그러나 기본적으로 이 함수는 명령이 실행되는 동안 명령 프롬프트 창을 표시합니다. 이 창이 나타나지 않도록 하려면 syscall.SysProcAttr의 HideWindow 필드를 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. }
그러나 이 방법은 특히 Windows에서 사용할 때 항상 작동하지 않을 수 있습니다. HideWindow를 true로 설정하더라도 명령 창이 잠시 나타날 수 있습니다.
더 안정적인 해결 방법은 syscall을 사용하여 SW_HIDE 플래그가 있는 새 프로세스를 생성하는 것입니다. 이렇게 하면 창이 표시되지 않고 새 프로세스가 실행됩니다.
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) }
이 방법을 사용하면 exec.Command()가 호출될 때 명령 프롬프트 창이 전혀 나타나지 않습니다.
위 내용은 Go에서 `exec.Command()`를 사용할 때 명령 프롬프트 창이 나타나지 않도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!