문제:
장기 실행 쉘 명령을 실행할 때 Go에서 os/exec를 사용하면 어떻게 실시간 출력을 검색하고 그대로 처리할 수 있나요? 사용 가능합니까?
해결책:
stdout 대신 stderr 사용:
ffmpeg는 다음과 같이 알려져 있습니다. stdout 대신 stderr로 진단 메시지를 출력합니다. 따라서 명령 개체를 생성할 때는 stdout 대신 stderr에 연결하십시오.
stderr의 출력을 지속적으로 읽기:
bufio.Scanner를 생성하세요. stderr을 사용하고 Scan 메서드를 사용하여 출력을 한 줄씩 또는 단어별로 읽습니다. word.
한 줄씩 출력 처리:
예제 코드에서는 scanner.Split(bufio.ScanWords)를 사용하여 분할합니다. 공백에 대한 출력. 처리 요구 사항에 따라 분할 유형을 조정합니다.
출력 처리:
추출, 처리 등 원하는 방식으로 출력을 조작합니다. 진행정보
예시 코드:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!