프로그래밍/Python 118

[python] requests - 응답을 UTF-8로 지정하여 받는 방법

requests 기본 사용법파이썬 requests 패키지로 웹 페이지의 HTML 소스를 가져올 때, 기본적으로 .text 속성을 사용하면 HTML 소스가 문자열로 반환됩니다. 이때, requests는 응답의 헤더에서 인코딩 정보를 자동으로 감지해 해당 인코딩으로 디코딩합니다.import requestsurl = "https://www.wikipedia.org/"response = requests.get(url)html = response.text # 자동 인코딩 감지 및 디코딩print(html)UTF-8로 강제 인코딩 지정간혹 서버가 인코딩 정보를 잘못 제공하거나, 한글 등 특수문자가 깨지는 경우가 있습니다. 이럴 때는 .encoding 속성을 직접 'utf-8'로 지정해줄 수 있습니다.import ..

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] pytest에서 "ModuleNotFoundError: No module named 'apt_pkg'" 오류 발생 문제

문제점 및 증상python3에서 pytest를 설치 후, 실행하였을 때 다음과 같은 오류가 발생하였습니다.$ pytest test-1.pyTraceback (most recent call last): File "/usr/lib/command-not-found", line 28, in from CommandNotFound import CommandNotFound File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFo..

[python] 쉘의 파이프 "|"를 subprocess.Popne()으로 처리하는 방법

개요보안성 등을 높이기 위하여 shell=False로 subprocess.run()을 사용할 때는 쉘 기능이 비활성화되므로 "ls | grep txt" 같은 파이프라인 명령어를 문자열로 넘길 수 없습니다. 이번 글에서는 쉘에서 파이프로 여러 명령을 연결하여 처리하는 것을 파이썬으로 어떻게 구현하는지 알아보도록 하겠습니다.기본적인 쉘 명령과 shell=True예를 들어, 리눅스에서 다음과 같은 명령을 실행한다고 해볼까요?ls | grep txt이 명령은 현재 디렉토리에서 txt라는 문자열이 포함된 파일만 출력합니다. Python에서 이걸 단순히 실행하려면 shell=True로 아래와 같이 할 수 있습니다.from subprocess import runresult = run("ls | grep txt", s..

PyInstaller - "ModuleNotFoundError: No module named 'debugpy'" 문제 해결하기

개요개발과 배포 환경 사이의 차이로 인해 종종 예상치 못한 문제가 발생합니다.최근 제가 겪은 PyInstaller 배포 시, 발생한 debugpy 관련 오류와 해결 과정을 공유하고자 합니다.스레드 내부 디버깅 설정멀티스레드 애플리케이션을 개발하던 중, 스레드 디버깅을 위해 debugpy를 사용하고 있었습니다.from debugpy import debug_this_thread# 스레드 코드의 일부def worker_thread(): debug_this_thread() # 디버깅을 위한 함수 호출 # 스레드 작업 수행... ...위와 같이 스레드 실행부에 debug_this_thread() 함수를 호출하여 개발 중에는 정상적으로 디버깅을 할 수 있었습니다.발생한 오류그러나 PyInstall..

Flask 특정 조건 시, 특정 정보만 응답하는 방법

개요Flask는 Python 기반의 경량 웹 프레임워크로, 라우팅이 매우 직관적으로 구성되어 있어 다양한 방식으로 요청을 처리할 수 있습니다. 이번 글에서는 특정 조건이 만족될 경우, 모든 경로(route)에 대해 하나의 고정된 응답만 반환하도록 구성하는 방법에 대해 소개합니다.예를 들어, 시스템 점검 중일 때 모든 사용자 요청에 대해 "서비스 점검 중입니다" 메시지를 반환하고 싶을 때 유용합니다.기본 라우트 구성우선 일반적인 Flask 라우트 구조를 살펴보겠습니다.from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/')def index(): return jsonify({"message": "Hello, World!"})@app.ro..

[python] bytearray 초기화하기

개요bytearray 객체를 초기화하는 방법을 정리해 둡니다.생성과 함께 초기화하기초기화 시 0으로 채우려면 다음과 같이 생성자로 객체를 만들면 됩니다.# 크기가 10인 bytearray를 생성하고 0으로 초기화b = bytearray(10) # 기본적으로 0으로 채워집니다생성된 bytearray 객체 초기화하기생성하여 이미 존재하는 bytearray를 0으로 초기화하는 방법은 다음과 같습니다.# 방법 1: 슬라이싱 사용b[:] = bytes([0] * len(b))# 방법 2: 반복문 사용for i in range(len(b)): b[i] = 0C에서는 memset 함수를 이용하여 간편하게 초기화를 할 수 있습니다.그러나, Python에서는 memset 함수를 제공하고 있지 않습니다.다음과 같이..

[python] 'await'가 없다면 어떻게 될까? - 구체적인 예제

await 키워드 없이 비동기 함수를 호출할 경우 발생하는 문제를 실제 코드 예제와 함께 더 구체적으로 살펴보겠습니다.기본 예제: 메시지 전송잘못된 방식 (await 없음)async def send_without_await(): message = Message("TestMessage", {"data": "test"}) # await 없이 비동기 함수 호출 server.send_message(message) # 코루틴 객체만 생성되고 실행되지 않음 print("메시지 전송 완료") # 실제로 전송되기 전에 출력됨실행 결과메시지 전송 완료RuntimeWarning: coroutine 'Communicator.send_message' was never awaited코드 설명server..

[python] `await` 키워드의 의미와 역할

await 키워드는 Python의 비동기 프로그래밍에서 핵심적인 역할을 하며, 코루틴 기반 코드에서 다음과 같은 중요한 의미와 기능을 가집니다.기본 개념await는 코루틴 함수 내에서만 사용할 수 있으며, 비동기 작업이 완료될 때까지 현재 코루틴의 실행을 일시 중단합니다. 이 때 중요한 점은 전체 프로그램이나 스레드가 블로킹되는 것이 아니라, 현재 코루틴만 일시 중단된다는 것입니다.주요 기능비동기 작업 대기async def send_message(self, message: Message): await self.send_queue.put(message)위 코드에서 await self.send_queue.put(message)는 메시지가 큐에 추가될 때까지 기다립니다. 큐가 가득 찼을 경우 이 작업은 ..

[Python] Enum과 Final 상수 비교 분석

Python에서 상수를 정의하는 방법으로 Enum과 클래스 내 Final 변수를 사용하는 두 가지 주요 접근법이 있습니다. 각각의 특징과 차이점을 자세히 살펴보겠습니다.Enum vs Final 상수: 기본 개념EnumPython 3.4부터 표준 라이브러리에 포함된 Enum은 관련된 상수 집합을 정의하기 위한 열거형 타입입니다.from enum import Enumclass Color(Enum): RED = '#FF0000' GREEN = '#00FF00' BLUE = '#0000FF'Final 상수Python 3.8부터 도입된 typing.Final은 변수가 재할당되지 않아야 함을 표시하는 타입 힌트입니다.from typing import Finalclass ColorConstants: ..

728x90