[go] 명령 실행 출력 파이프

이번 글에서는 Go 언어를 사용하여 외부 명령을 실행하고 그 출력을 파이프하여 처리하는 방법에 대해 알아보겠습니다.

외부 명령 실행

Go에서 외부 명령을 실행하기 위해서는 os/exec 패키지를 사용합니다. 아래는 간단한 예제 코드입니다.

package main

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

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

위 예제는 ls -l 명령을 실행하고 그 결과를 출력하는 코드입니다.

출력 파이프

외부 명령의 출력을 다른 명령이나 Go 프로그램으로 파이프하여 처리할 수 있습니다. 아래는 이를 수행하는 예제 코드입니다.

package main

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

func main() {
	cmd1 := exec.Command("ls", "-l")
	cmd2 := exec.Command("wc", "-l")

	reader, writer := io.Pipe()
	cmd1.Stdout = writer
cmd2.Stdin = reader

var cmd2Output bytes.Buffer
cmd2.Stdout = &cmd2Output

cmd1.Start()
cmd2.Start()
cmd1.Wait()
writer.Close()
cmd2.Wait()

fmt.Println(cmd2Output.String())
}

위의 예제에서는 ls -l 명령의 출력을 wc -l 명령으로 파이프하여 라인 수를 세는 방법을 보여줍니다.

이렇게 하면 Go 언어에서 외부 명령을 실행하고 그 출력을 파이프하여 효과적으로 처리할 수 있습니다.

결론

Go 언어의 os/exec 패키지를 사용하면 외부 명령을 실행하고 그 출력을 파이프하는 작업을 쉽게 처리할 수 있습니다. 이를 통해 Go 언어로 다양한 시스템 관리 및 자동화 작업을 보다 효율적으로 수행할 수 있습니다.

참고 문헌: