Linux Mint에서 실행되는 Gtk + 3.10.8을 사용하는 Python 2.7의 GUI 응용 프로그램이 있습니다.파이썬에서 c 라이브러리 stdout 메시지 리디렉션
응용 프로그램은 비디오 플레이어를 임베드하기 위해 libvlc 라이브러리의 파이썬 바인딩을 사용합니다. libvlc 라이브러리는 비디오 처리에 libav를 사용합니다.
제 문제는 libav가 매우 장황하고 경고의 상수 스트림이 생성된다는 것입니다. libvlc는 자세한 정보를 변경하거나 억제하는 메커니즘을 제공하지 않습니다.
물론, 하나는 (예를 들어)하여 파이썬 스크립트를 실행하여 소음을 해제 할 수 있습니다
$ ./myprogram.py &> /dev/null
나는 프로그램 내에서 프로그램 같은 효과를 얻을 수 있도록하고 싶습니다. 외부 라이브러리의 모든 액세스를 stdout으로 단순히 억제하는 것이 좋겠지 만 궁극적으로는 출력을 캡처하고 일부 로깅을 구현하는 것이 좋습니다.
이 주제에서 찾을 수있는 모든 예는 외부 프로세스를보다 직접적으로 제어 (예 : 하위 프로세스로 선언)하는 것으로 가정합니다. 파이썬 코드에서 실제 라이브러리 (libav)에 직접 액세스 할 수 없을 때 다른 방법이 있습니까?
편집 : 모두의 도움 덕분에 정답은 Python version of freopen(), 대답 # 3에서 찾을 수 있습니다.
어떤 방식 으로든 stdout을 방해하는 IDE에서 코드를 실행하지 않도록하십시오. 대화 형 십오 그렇게하는 경향과 같은 오류가 발생합니다 :
AttributeError: FileWrapper instance has no attribute 'fileno'
감사합니다. 정확히 어떻게하는지 설명하지는 않았지만 (미안하지만, 나는 초보자입니다.), 이것은 여전히 올바른 답이었습니다. 내 실제 문제는 내가 정확히 (실현하지 않고)했던 소스 코드 예제를 시도했지만 ** stdout **을 선점 한 IDE에서 실행 중이기 때문에 실행되지 않았다는 것입니다. 나는 그 모범으로 돌아가서 (그리고 다른 사람들의 무리) 마침내 무슨 일이 일어나고 있는지 알아 냈다. 이 예는 [여기] (http://stackoverflow.com/questions/16582194/python-version-of-freopen), answer # 3입니다. –