스트리밍 명령 출력 진행
질문:
긴 출력을 어떻게 스트리밍할 수 있습니까? -실행 명령, 최종 업데이트가 아닌 간헐적인 업데이트 제공 결과?
답:
bufio.ScanLines()와 함께 bufio.NewScanner() 함수를 사용하면 명령의 출력을 한 줄씩 읽을 수 있습니다. , 결과가 나오는 대로 스트리밍합니다. 다음은 제공된 코드를 기반으로 수정된 예입니다.
func main() { cmd := exec.Command("go", "run", "child_process.go") stdout, _ := cmd.StdoutPipe() cmd.Start() scanner := bufio.NewScanner(stdout) for scanner.Scan() { fmt.Println(scanner.Text()) log.Printf(scanner.Text()) } cmd.Wait() }
이것이 효과적으로 작동하려면 실행된 명령이 fmt.Println() 또는 log.Printf()를 사용하여 진행 상황을 출력해야 합니다.
가능한 함정:
대체 솔루션:
개행 문자를 신뢰할 수 없는 경우 대체 방법을 사용할 수 있습니다. 채용:
주의:
바이트 단위 또는 룬 단위로 읽는 방법은 다음과 같습니다. 멀티바이트 UTF-8 인코딩 문자 관련 문제입니다. UTF-8 룬을 캡처할 수 있을 만큼 큰 버퍼를 사용해야 합니다.
위 내용은 Go에서 장기 실행 명령 출력의 진행 상황을 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!