프로그래밍/Python 99

[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] Flask - Server 헤더 변경하기

개요Python Flask로 웹 애플리케이션을 구현하고, 서버의 응답 헤더를 보면 다음과 같은 형태로 표시됩니다.HTTP/1.1 200 OKServer: Werkzeug/2.2.2 Python/3.11.2Date: Tue, 07 Jan 2025 03:00:59 GMTContent-type: application/json; charset=utf-8Content-Length: 1043Connection: close"Server" 헤더에 Flask 및 Python 버전 정보가 표시됩니다.본 글에서는 보안상의 이유 등으로 "Server" 헤더 정보를 변경하는 방법에 대하여 자세히 살펴 보겠습니다.WSGIRequestHandler.server_version응답의 "Server" 헤더 정보를 변경하는 가장 확실한 ..

[python] "v1.v2.v3.v4" 버전 문자열을 숫자들로 변환하기

개요일반적으로 이용하는 "v1.v2.v3.v4" 버전 문자열에서 각각의 숫자들을 추출하는 방법을 알아 보겠습니다.크게 두 가지(split(), 정규식) 방법으로 추출할 수 있습니다.split() 메소드 이용법간단하게 문자열의 split() 메소드를 이용하여, 버전 문자열의 "." 문자로 나누어서 int 형식으로 변환하면 됩니다.version_str = "1.2.3.4"parts = version_str.split('.')v1, v2, v3, v4 = map(int, parts)직관적이지만 "1.2.3.4a"과 같이 알파벳이 입력된 경우 "ValueError: invalid literal for int() with base 10: '4a'"와 같은 오류가 발생합니다.따라서 올바른 버전 문자열이 입력되었는지..

[Python] 현재 시간대에 대한 OFFSET 시간 (UTC) 구하기

개요파이썬에서 현재 시간대에 대한 OFFSET 시간 정보를 확인하는 방법을 정리해 둡니다.datetime 활용UTC 기준 시각으로부터 현재 시간대에 대한 OFFSET 시간은, 우리 나라의 경우 +9시간입니다. 이 값을 구하는 몇 가지 방법을 간단하게 알아 보겠습니다.첫 번재는 datetime 패키지를 이용한 방법입니다.from datetime import datetimelocal_now = datetime.now()utc_now = datetime.utcnow()offset = local_now - utc_nowprint(f"UTC Offset : {offset} / {offset.seconds / 3600:+.1f} hours")단순하게 현재 시간대의 datetime을 구한다음 UTC 시간대의 date..

[python] dict 객체 복사의 세 가지 방법 : 참조 복사, 얕은 복사, 깊은 복사

개요Python에서 딕셔너리(dict ; dictionary) 객체를 복사할 때 알아야 할 세 가지 복사 방법을 상호 비교 정리해 둡니다.일반 복사 (참조 복사)등호 ('=') 기호를 통하여 딕셔너리 객체의 참조를 다른 변수에 참조만 그대로 복사합니다.따라서 두 객체는 완전히 동일합니다.original_dict = {'a': 1, 'b': [1, 2, 3]}copy_dict = original_dict# 값 변경 시 원본도 함께 변경됨copy_dict['a'] = 10print(original_dict) # {'a': 10, 'b': [1, 2, 3]}print("원본 딕셔너리 ID:", id(original_dict))print("참조 복사 딕셔너리 ID:", id(ref_copy))print("딕셔..

[python] struct.error: char format requires a bytes object of length 1

문제점 및 증상struct.pack() 함수를 bytes 데이터 생성 중, "c"로 한 문자를 입력받아 처리하는 과정에서 다음과 같은 오류가 발생하였습니다.pack('>c', 'C')Traceback (most recent call last): File "", line 1, in pack('>c', 'C')struct.error: char format requires a bytes object of length 1문제 분석파이썬 2.x 버전에서는 "pack('>c', 'C')"와 같은 코드가 문제가 없었으나, 3.x 버전으로 올라오면서 동일한 문장에 대하여 "struct.error: char format requires a bytes object of length 1" 오류가 발생합니다.다음과 ..

[python] 명령줄 인자 분석 - argparse.ArgumentParser

파이썬에서 명령줄 파라미터를 처리하는 방법을 알아겠습니다.일반적으로 가장 많이 사용되는 것은 파이썬에 내장된 argparse 모듈입니다. 본 글에서는 argparse 모듈의 ArgumentParser 클래스를 이용하는 방법에 대하여 알아 보도록 하겠습니다.명령줄 인자(Command-Line Arguments)란?프로그램을 실행할 때 프로그램에 전달하는 추가 정보입니다.다음과 같은 형식으로 프로그램 실행 시, 추가적인 정보를 전달합니다.$ my_app hello world 123위에서는 "hello" "world" "123" 등 3개의 정보를 추가로 전달하여 "my_app"을 실행하게 됩니다.파이썬에서는 sys.argv로 위와 같이 전달된 명령줄 인자를 받아서 처리할 수 있습니다.import sysprin..

[python] TypeError: argument 'data': 'memoryview' object cannot be converted to 'PyBytes'

문제점 및 증상다음과 같이 "fastcrc"를 이용한 간단한 CRC 계산 코드를 작성하였습니다.10 바이트를 그냥 던져서 계산하는 것과, 5바이트씩 나누어 계산한 결과가 같은지 확인하는 예시입니다.메모리 뷰를 이용한 것은 대량 메모리에 대한 CRC 계산을 위하여, 전체 메모리를 복사하지 않도록 하기 위해서 였습니다.from fastcrc import crc16data = b'1234567890'crc = crc16.kermit(data)print(f'crc16 (1) = {crc:04X}')mv_data = memoryview(data)temp_crc = 0temp_crc = crc16.kermit(mv_data[0:5]), temp_crc)temp_crc = crc16.kermit(mv_data[5:]..

[python] LM73 TI 온도센서에서 온도값 읽어오기

개요LM73CIM 칩은 Texas Instruments에서 제조한 디지털 온도 센서입니다. I2C 인터페이스를 사용하여 Raspberry Pi나 다른 마이크로컨트롤러와 통신할 수 있습니다. 본 글에서는 라즈베리 파이에서 I2C로 LM73CIM 칩으로부터 온도값을 읽어오는 방법에 대하여 설명합니다.라즈베리 파이 I2C 활성화하기"raspi-config"를 이용하여 I2C를 활성화하거나, "/boot/firmware/config.txt" 파일에서 다음 설정 부분의 주석을 해제해 주어야 합니다.dtparam=i2c_arm=on"/boot/firmware/config.txt" 파일의 설정을 변경한 후, 라즈베리 파이를 재부팅 합니다.재부팅한 이후에 "/dev" 폴더에 i2c 관련 장치가 표시됩니다.$ ls /d..

728x90