>백엔드 개발 >Golang >Go의 `exec.Command()`를 사용하여 파이프된 명령을 효과적으로 실행하는 방법은 무엇입니까?

Go의 `exec.Command()`를 사용하여 파이프된 명령을 효과적으로 실행하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 20:36:11947검색

How to Execute Piped Commands Effectively Using Go's `exec.Command()`?

Go의 exec.Command()를 사용하여 파이프된 명령 실행

exec.Command()를 사용하여 명령을 실행할 때 파이프가 포함된 명령을 실행할 수 있으므로 다음을 수행할 수 있습니다. 여러 명령을 함께 연결합니다.

예를 들어 다음 명령은 ps cax 및 성공:

out, err := exec.Command("ps", "cax").Output()

그러나 다음 명령을 사용하여 ps cax의 출력을 grep myapp으로 파이프하려는 시도는 실패합니다.

out, err := exec.Command("ps", "cax | grep myapp").Output()

이 문제를 해결하려면 좀 더 관용적인 방법을 채택할 수 있습니다. Go에서 파이프를 사용하는 접근 방식:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    grep := exec.Command("grep", "redis")
    ps := exec.Command("ps", "cax")

    // Connect ps's stdout to grep's stdin.
    pipe, _ := ps.StdoutPipe()
    defer pipe.Close()

    grep.Stdin = pipe

    // Start ps first.
    ps.Start()

    // Run and retrieve the output of grep.
    res, _ := grep.Output()

    fmt.Println(string(res))
}

이 예에서는 두 개의 exec.Cmd 구조체를 생성합니다. 각 명령에 대해 ps의 stdout과 grep의 stdin 사이에 파이프를 설정합니다. ps를 먼저 시작하여 grep에서 해당 출력을 사용할 수 있는지 확인합니다. 그런 다음 grep을 실행하고 출력을 검색하여 두 명령을 효과적으로 연결합니다.

위 내용은 Go의 `exec.Command()`를 사용하여 파이프된 명령을 효과적으로 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.