> 백엔드 개발 > Golang > Go에서 `exec.Command()`를 사용할 때 명령 프롬프트 창이 나타나지 않도록 하려면 어떻게 해야 합니까?

Go에서 `exec.Command()`를 사용할 때 명령 프롬프트 창이 나타나지 않도록 하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-09 02:00:12
원래의
644명이 탐색했습니다.

How Can I Prevent the Command Prompt Window from Appearing When Using `exec.Command()` in Go?

Go에서 Exec을 사용하여 명령 프롬프트 창 숨기기

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿