exec.Command 함수를 사용하여 명령을 실행할 때 실제 실행을 위해 출력을 로그로 리디렉션하는 것이 바람직한 경우가 많습니다. 시간 모니터링. CombinedOutput은 명령이 완료되면 전체 출력을 캡처할 수 있지만 장기간 실행되거나 완료되지 않은 프로세스에는 적합하지 않습니다.
실시간 출력 리디렉션을 위한 일반적인 솔루션은 stdout 및 stderr을 시스템 출력 스트림에 직접 할당하는 것입니다. (os.Stdout 및 os.Stderr). 그러나 이는 터미널에 쓰지 않는 애플리케이션에는 실용적이지 않을 수 있습니다.
파이프를 사용한 솔루션
명령 출력을 로그로 리디렉션하려면 파이프를 활용할 수 있습니다. . 예는 다음과 같습니다.
stdout, err := cmd.StdoutPipe() if err != nil { return nil, err } // Start the command with the pipe in place if err := cmd.Start(); err != nil { return nil, err } // Real-time monitoring of stdout in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Write line to log or perform other operations } if err := in.Err(); err != nil { log.Printf("Error: %s", err) }
고려 사항
이 방법은 stdout을 처리하지만 별도의 파이프와 고루틴을 생성하여 stderr을 관리할 수도 있습니다. 또한 적절한 정리 및 리소스 관리를 보장하기 위해 컨텍스트 취소 또는 기타 극단적인 경우를 처리해야 할 수도 있습니다.
위 내용은 Golang에서 실시간으로 명령 출력을 로그로 리디렉션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!