[go] go 언어의 exec 패키지를 사용하여 리다이렉션 구현하는 방법

Go 언어에서는 exec 패키지를 사용하여 외부 명령을 실행하고 해당 명령의 표준 입력, 표준 출력, 표준 에러를 리다이렉션할 수 있습니다. 이를 통해 Go 언어로 다른 프로세스와의 상호 작용을 간편하게 구현할 수 있습니다.

exec 패키지 소개

os/exec 패키지는 외부 명령을 실행하는 데 사용됩니다. 이 패키지를 사용하면 외부 명령을 실행하고, 명령을 실행한 후의 결과를 가져오거나 표준 입력, 표준 출력, 표준 에러를 다른 소스로 리다이렉션할 수 있습니다.

표준 출력 리다이렉션

다음은 exec 패키지를 사용하여 표준 출력을 리다이렉션하는 예제 코드입니다.

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	cmd := exec.Command("ls", "-l")
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		fmt.Println(err)
		return
	}

	if err := cmd.Start(); err != nil {
		fmt.Println(err)
		return
	}

	content, err := io.ReadAll(stdout)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(content))
}

위 코드는 ls -l 명령을 실행하고 표준 출력을 읽어와서 화면에 출력하는 예제입니다.

표준 입력 리다이렉션

아래는 exec 패키지를 사용하여 표준 입력을 리다이렉션하는 예제 코드입니다.

package main

import (
	"fmt"
	"os/exec"
)

func main() {
	cmd := exec.Command("wc", "-l")
	cmd.Stdin = strings.NewReader("hello\nworld\n")

	output, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(output))
}

위 코드는 wc -l 명령을 실행하고 “hello\nworld\n”을 표준 입력으로 제공하여 실행 결과를 가져오는 예제입니다.

정리

Go 언어의 exec 패키지를 사용하면 외부 명령의 실행과 그 결과를 표준 입력, 표준 출력, 표준 에러를 리다이렉션하여 처리할 수 있습니다. 이를 통해 Go 언어에서 다른 프로세스와의 상호 작용을 편리하게 처리할 수 있습니다.