현재 Raspberry Pi 4에서 Python으로 OpenCV를 사용하고 있으며 libjpeg 문제로 인해 다음과 같은 불필요한 콘솔 메시지가 계속 표시됩니다.
Corrupt JPEG data: 10 extraneous bytes before marker 0xd6
내 목표는 다른 오류 메시지를 실시간으로(물론 일반적인 표준 출력으로) 인쇄하면서 이러한 메시지를 필터링하는 것입니다. 프로그램은 대화형이므로 프로그램이 실행되는 동안에도 프로그램에 입력을 제공할 수 있어야 합니다.
내부적으로 stderr 및 stdout에 대한 인쇄를 비활성화하기 위해 Python을 사용해 보았습니다.이것하지만 별도의 프로세스(libjpeg로 가정)에 의해 오류가 발생한 것 같으므로 Python 내에서 sys.stderr를 리디렉션해도 아무런 효과가 없습니다. 또한 "Corrupt"로 시작하는 오류 메시지를 필터링하기 위해 bash one liner를 생성하려고 시도했지만 결과는 다음과 같습니다.
python test.py 2> >(sed -u '/^Corrupt/ d')
이는 이러한 메시지를 필터링하기 때문에 부분적으로 작동하지만 스크립트가 끝날 때까지 다른 오류 메시지도 표시하지 않습니다. 따라서 오류가 발생하면 스크립트가 완료된 후 해당 오류와 다른 모든 오류 메시지가 동시에 표시됩니다. CTRL-C를 통해 프로세스를 일찍 종료하면 오류가 전혀 표시되지 않습니다.
다른 모든 오류 메시지를 끝까지 버퍼링하지 않고 오류 스트림을 필터링하는 방법에 대한 아이디어가 있습니까?
답변1
터미널에 직접 인쇄할 때 Python은 기본적으로 라인 버퍼링을 수행하므로 무슨 일이 일어나고 있는지 확인할 수 있습니다. 그러나 출력을 파이프/파일로 보낼 때 Python은 출력을 완전히 버퍼링합니다. 이는 많은 Linux 명령의 일반적인 동작입니다. 이를 해결하려면 다음을 사용하십시오.python -u
출력을 명시적으로 언버퍼링합니다.
답변2
노력하다:
python test.py 2>&1 | grep -v "Corrupt JPEG data"