> 백엔드 개발 > Golang > Go에서 쉘 명령으로부터 실시간 출력을 얻는 방법은 무엇입니까?

Go에서 쉘 명령으로부터 실시간 출력을 얻는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-08 18:51:15
원래의
493명이 탐색했습니다.

How to Get Realtime Output from Shell Commands in Go?

Go에서 쉘 명령에 대한 실시간 출력을 검색하는 방법

문제:

장기 실행 쉘 명령을 실행할 때 Go에서 os/exec를 사용하면 어떻게 실시간 출력을 검색하고 그대로 처리할 수 있나요? 사용 가능합니까?

해결책:

  1. stdout 대신 stderr 사용:

    ffmpeg는 다음과 같이 알려져 있습니다. stdout 대신 stderr로 진단 메시지를 출력합니다. 따라서 명령 개체를 생성할 때는 stdout 대신 stderr에 연결하십시오.

  2. stderr의 출력을 지속적으로 읽기:

    bufio.Scanner를 생성하세요. stderr을 사용하고 Scan 메서드를 사용하여 출력을 한 줄씩 또는 단어별로 읽습니다. word.

  3. 한 줄씩 출력 처리:

    예제 코드에서는 scanner.Split(bufio.ScanWords)를 사용하여 분할합니다. 공백에 대한 출력. 처리 요구 사항에 따라 분할 유형을 조정합니다.

  4. 출력 처리:

    추출, 처리 등 원하는 방식으로 출력을 조작합니다. 진행정보

예시 코드:

package main

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

func main() {
    args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb"
    cmd := exec.Command("ffmpeg", strings.Split(args, " ")...)

    stderr, _ := cmd.StderrPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stderr)
    scanner.Split(bufio.ScanWords)
    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
    }
    cmd.Wait()
}
로그인 후 복사

출력:

코드는 다음과 같은 ffmpeg 출력 메시지를 지속적으로 인쇄합니다.

frame=  101 fps=0.0 q=28.0 size=      91kB time=00:00:04.13 bitrate= 181.2kbits/s
로그인 후 복사

위 내용은 Go에서 쉘 명령으로부터 실시간 출력을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿