Python 20

[python] BytesIO에서 "read()"로 읽을 데이터 유무 확인 방법

Python에서 제공하는 "io.BytesIO" 클래스는 메모리 상의 이진 데이터를 파일 객체처럼 다룰 수 있도록 도와줍니다.특히 테스트 환경이나 네트워크 시뮬레이션에서 실제 파일을 만들지 않고도 손쉽게 데이터를 읽고 쓸 수 있다는 장점이 있습니다.하지만 "BytesIO" 객체에서 데이터를 읽을 때, 단순히 "더 읽을 데이터가 남아 있는지" 확인하는 방법은 생각보다 직관적이지 않을 수 있습니다. 이번 글에서는 "BytesIO.read()"와 관련된 데이터 유무 확인 방법을 알아 보겠습니다.1. "readable()" 메서드의 의미먼저 많은 분들이 착각하실 수 있는 부분이 있습니다."BytesIO" 객체에는 "readable()" 메서드가 있는데, 이는 이 객체가 읽기 기능을 지원하는지 여부 만 반환합니다..

[python] 네트워크 시험에서 Stub와 Driver의 개념과 예제

네트워크 또는 통신 프로토콜 시험을 수행할 때, stub과 driver는 시험 환경을 구성하는 데 있어 중요한 역할을 담당합니다. 실제 시스템 전체가 구현되기 전에도 각 부분을 독립적으로 검증할 수 있도록 도와주는 개념이므로, 개발 및 시험 과정에서 널리 활용됩니다.이번 글에서 stub과 driver의 개념과 간단한 예제를 통하여 차이점을 알아 보도록 하겠습니다.Stub의 개요와 특징Stub은 아직 구현되지 않은 상위 모듈을 대신하는 더미 모듈입니다. 즉, 하위 모듈(예: 클라이언트)이 호출할 상위 모듈(예: 서버)이 준비되지 않았을 때, 마치 실제 서버처럼 요청을 받아 예상되는 응답을 반환하는 역할을 합니다.특징을 정리하면 다음과 같습니다.요청에 대해 미리 정의된 응답을 반환실제 상위 시스템이 없어도 ..

[python] "@dataclass"를 활용하여 클래스 작성을 빠르게 해보자

파이썬 3.7에서 도입된 @dataclass 데코레이터는 클래스 작성 방식을 획기적으로 바꾸어 놓은 기능입니다. 복잡하고 반복적인 보일러플레이트 코드(boilerplate code)를 자동화하여 개발자가 핵심 로직에 집중할 수 있도록 도와줍니다.@dataclass란 무엇인가?@dataclass는 파이썬의 dataclasses 모듈에 포함된 데코레이터로, 클래스 선언에 붙여 사용합니다. 이 데코레이터는 클래스의 필드를 기반으로 __init__, __repr__, __eq__ 등의 특수 메서드를 자동으로 생성해줍니다.기본 사용법from dataclasses import dataclass@dataclassclass Person: name: str age: int email: str위 코드는 다..

ctypes.addressof() 함수를 이용하여 bytes 객체를 만드는 방법

Python에서 ctypes.addressof() 함수의 반환값(메모리 주소)을 이용해 일정 길이만큼 bytes 객체를 만드는 방법을 알아 보겠습니다.방법 1: ctypes.string_at() 사용 (권장)import ctypes# 예시: 배열 생성arr = (ctypes.c_int * 5)(1, 2, 3, 4, 5)addr = ctypes.addressof(arr)# 주소에서 특정 길이만큼 bytes로 읽기length = ctypes.sizeof(arr) # 또는 원하는 길이data = ctypes.string_at(addr, length)print(type(data)) # print(data.hex()) # 0100000002000000030000000400000005000000방법 2: ct..

[python] Exception: task_done() called too many times

Python의 queue.Queue에서 "task_done() called too many times" 오류가 발생하는 이유는 task_done() 메서드를 get()으로 가져온 아이템 수보다 더 많이 호출했기 때문입니다.발생 원리Queue는 내부적으로 "처리되지 않은 작업 수(unfinished tasks)"를 카운터로 관리합니다.put()으로 아이템을 넣을 때마다 카운터가 +1task_done()을 호출할 때마다 카운터가 -1카운터가 0보다 작아지려고 하면 이 오류가 발생주요 원인들get() 없이 task_done() 호출import queueq = queue.Queue()q.put("item")q.task_done() # get()을 하지 않았는데 task_done() 호출 - 오류!task_do..

[python] 코드가 실행중일 때, 디버깅 중인지 확인하는 방법

개요파이썬으로 만든 코드를 디버깅할 때와 실제 배포하여 실행될 때 서로 다른 동작을 시켜야할 경우가 있습니다. 디버깅할 때는 디버깅을 위하여 보다 상세한 정보를 출력한다던지 성능과 관계없이 디버깅을 위한 부분을 더 추가해 주게 되는데, 실제 실행할 때는 불필요한 부분입니다.이번에는 파이썬 코드가 실행중일 때, 디버깅 중인지 확인하는 방법을 알아 보도록 하겠습니다.sys.gettrace()from sys import gettracedef is_debugging(): return (gettrace() != None)DEBUGPY_RUNNING 환경변수from os import getenvdef is_debugging(): return bool(getenv('DEBUGPY_RUNNING'))pdb ..

[Python] 품질 설정과 함께 이미지를 JPEG로 저장 방법들

개요Python에서 이미지를 품질 (Quality)을 지정하여 JPEG 형식으로 저장하는 여러 가지 방법을 정리해 둡니다.PIL(Python Imaging Library)/Pillowfrom PIL import Image# 이미지 열기img = Image.open('input.png')# JPEG로 저장img.save('output.jpg', format = 'JPEG')# 품질 설정하여 저장 (1-95)img.save('output_quality.jpg', 'JPEG', quality=85)# RGB로 변환 후 저장 (알파 채널이 있는 경우)img_rgb = img.convert('RGB')img_rgb.convert('RGB').save('output_rgb.jpg', 'JPEG')가장 널리 사용되는..

[python] netmask 문자열로 CIDR 형식의 비트 개수를 반환하는 방법

개요netmask 문자열(예: "255.255.255.0")을 CIDR 형식의 비트 개수(접두사 길이)를 얻는 방법을 정리해 둡니다.CIDR 표기법이란?CIDR(Classless Inter-Domain Routing) 형식은 IP 주소와 네트워크 마스크를 표현하는 간결하고 유연한 방법입니다. CIDR 표기법의 주요 특징은 다음과 같습니다.IP 주소와 접두사 길이로 구성: 예를 들어, 192.168.0.0/24 형태로 표현합니다.접두사 길이: '/' 뒤의 숫자(0-32)로, 네트워크 부분의 비트 수를 나타냅니다.유연한 네트워크 구분: 기존의 클래스 기반 주소 체계와 달리, 네트워크와 호스트 부분을 유연하게 정의할 수 있습니다.효율적인 IP 주소 관리: 네트워크 주소 자원을 절약하고 효율적으로 할당할 수 있..

[jetson] Namespace GstRtspServer not available 오류 해결 방법

문제점 및 증상 DeepStream SDK 파이썬 예제중에서 "rtsp"로 출력하는 예제를 실행했더니, 다음과 같이 "ValueError: Namespace GstRtspServer not available" 오류가 발생하였습니다. nvidia@nvidia-OrinNX16G:/opt/nvidia/deepstream/deepstream/sources/deepstream_python_apps/apps/deepstream-test1-rtsp-out$ python deepstream_test1_rtsp_out.py Traceback (most recent call last): File "deepstream_test1_rtsp_out.py", line 26, in gi.require_version('GstRtsp..

[python] Could not find a version that satisfies the requirement torch==1.11.0+cu113

문제점 및 증상"PyTorch v1.11.0+cu113"를 설치하는 과정에서 다음과 같은 오류를 만났습니다.$ pip install torch==1.11.0+cu113ERROR: Could not find a version that satisfies the requirement torch==1.11.0+cu113 (from versions: 1.11.0, 1.12.0, 1.12.1, 1.13.0, 1.13.1, 2.0.0, 2.0.1, 2.1.0, 2.1.1, 2.1.2, 2.2.0, 2.2.1, 2.2.2, 2.3.0)ERROR: No matching distribution found for torch==1.11.0+cu113시험 환경HW: Intel i5 / 16GB RAMGPU: NVIDIA RTX..

728x90