티스토리 뷰

Python

[Python] print 비활성화

developer0hye 2022. 10. 9. 18:53

https://stackoverflow.com/a/45669280

 

How to block calls to print?

Is there a way to stop a function from calling print? I am using the pygame.joystick module for a game I am working on. I created a pygame.joystick.Joystick object and in the actual loop of the game

stackoverflow.com

 

 

import os, sys

class HiddenPrints:
    def __enter__(self):
        self._original_stdout = sys.stdout
        sys.stdout = open(os.devnull, 'w')

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = self._original_stdout
        
with HiddenPrints():
    print("This will not be printed")

print("This will be printed as before")

 

print가 호출되지 않았으면 하는 함수, 클래스 생성자를 호출할때

 

with HiddenPrints(): 로 감싸주면 된다.

 

왜 이게 필요했는가

 

COCO 데이터셋의 어노테이션 포맷을 따르는 데이터를 로드할 일이 있었다. 이를 위해 pycocotools 라이브러리를 사용했다.

 

https://github.com/cocodataset/cocoapi

 

GitHub - cocodataset/cocoapi: COCO API - Dataset @ http://cocodataset.org/

COCO API - Dataset @ http://cocodataset.org/ . Contribute to cocodataset/cocoapi development by creating an account on GitHub.

github.com

 

그런데 코드를 분석해보면 데이터를 파싱하는 과정에 요란하게 출력되는 메시지들이 몇 존재한다.

 

https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/coco.py#L86

 

GitHub - cocodataset/cocoapi: COCO API - Dataset @ http://cocodataset.org/

COCO API - Dataset @ http://cocodataset.org/ . Contribute to cocodataset/cocoapi development by creating an account on GitHub.

github.com

 

읽어야할 데이터가 COCO 포맷으로 어노테이션이 되어 있었는데 이게 하나의 json 파일로 되어있던게 아니라 수천개의 json 파일로 구성돼있었다. 그렇다보니  COCO 클래스의 생성자가 json 파일개수만큼 호출되어서 로그가 너무 지저분해지는 문제가 있었다. 이를 해결하다보니 해당 방법을 사용하게 됐다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함