> 백엔드 개발 > Golang > 실시간 명령 출력을 상위 프로세스 및 로그 파일로 스트리밍하는 방법은 무엇입니까?

실시간 명령 출력을 상위 프로세스 및 로그 파일로 스트리밍하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-15 07:26:13
원래의
805명이 탐색했습니다.

How to Stream Real-time Command Output to Parent Process and Log File?

스트리밍 명령: 실시간 진행 상황 출력

이 시나리오에서는 실행된 명령의 출력을 상위 프로세스와 로그 모두에 스트리밍하는 것이 목표입니다. 파일. 그러나 표준 cmd.StdoutPipe는 최종 결과를 문자열로 반환하는데, 이는 장기 실행 프로세스에 대한 제한 사항이 됩니다.

솔루션 탐색

exec.Command를 활용하는 제공된 코드는, StdoutPipe 및 bufio.NewScanner는 의도한 대로 작동합니다. 하위 프로세스의 출력을 효과적으로 스트리밍하여 콘솔에 인쇄하고 실시간으로 기록합니다. 하위 프로세스의 실시간 출력은 발생하는 대로 캡처되어 표시됩니다.

문제 해결 팁

코드가 작동하지 않으면 다음 이유를 고려하십시오.

  • 새 줄 누락: bufio.NewScanner는 전체 줄을 읽고, 줄 바꿈이 발생할 때만 데이터를 반환합니다. 개행 문자. 명령이 줄 바꿈을 인쇄하지 않으면 출력이 즉시 스트리밍되지 않을 수 있습니다.
  • 명령 출력 버퍼: 프로세스에는 stdout 및 stderr에 대한 기본 버퍼 크기가 있습니다. 버퍼가 채워졌으나 읽지 않으면 쓰기 차단으로 인해 하위 프로세스가 중단될 수 있습니다. 따라서 이 문제를 방지하려면 항상 stdout과 stderr을 모두 읽으십시오.

가능한 해결 방법

명령이 줄 바꿈을 인쇄하지 않는 경우 출력을 스트리밍하는 다른 방법이 있습니다.

  • 단어 읽기: 스캐너 분할 기능을 다음으로 설정하세요. 행 대신 개별 단어를 읽으려면 bufio.ScanWords를 사용하세요.
  • 문자로 읽기: 문자를 하나씩 읽으려면 스캐너 분할 기능을 bufio.ScanRunes로 설정하세요.
  • 수동 읽기: stdout을 바이트 단위로 읽거나 룬 단위로 읽어 UTF-8 인코딩이 처리되는지 확인합니다.

하위 프로세스가 기본 stdout 및 stderr 스트림에 쓰는 경우 명시적으로 읽지 않는 한 삭제된다는 점을 기억하는 것이 중요합니다. 이러한 스트림을 읽으면 하위 프로세스가 일반적으로 이러한 스트림으로 출력하지 않는 경우에도 출력이나 오류 메시지를 놓치지 않게 됩니다.

위 내용은 실시간 명령 출력을 상위 프로세스 및 로그 파일로 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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