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