>백엔드 개발 >Golang >Go의 `exec.Command()`에서 파이핑 명령이 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?

Go의 `exec.Command()`에서 파이핑 명령이 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 11:03:14125검색

Why Does Piping Commands in Go's `exec.Command()` Fail, and How Can I Fix It?

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

Q: 종료 상태 1에서 파이프 명령이 실패함

exec.Command()를 사용하여 명령을 파이프하려고 하면 다음 오류가 발생합니다. 발생:

ps, "cax | grep myapp"

ps cax가 작동하는 동안 이 명령이 실패하는 이유는 무엇입니까?

A: exec.Command()를 사용한 관용적 파이핑

통과 bash에 대한 전체 명령으로 문제를 해결할 수 있지만 좀 더 관용적인 방법이 있습니다. 해결 방법:

  1. 각 단계(ps 및 grep)에 대해 별도의 명령을 만듭니다.
  2. 파이프를 사용하여 표준 입력과 출력을 연결합니다.
  3. ps를 먼저 실행한 다음 grep을 실행합니다. .

코드 예:

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

    // Run ps first.
    ps.Start()

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

    fmt.Println(string(res))
}

설명:

  • grep과 ps는 별도의 명령으로 생성됩니다.
  • 파이프가 생성됩니다. ps의 stdout에서 grep의 stdin으로.
  • ps가 시작되었습니다. 먼저 출력이 grep에 사용 가능한지 확인합니다.
  • 그런 다음 grep이 실행되고 해당 출력이 검색되어 원하는 결과를 제공합니다.

위 내용은 Go의 `exec.Command()`에서 파이핑 명령이 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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