Python
-
기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.
[python] json.dumps object of type bytes is not json serializable기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.
2020.12.22 -
삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..
[python3] smtp 로 여러명에게 이메일 보내기삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..
2020.12.14 -
아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..
변수 범위 이해가 안감..아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..
2020.11.27 -
문자열을 숫자로 저장했다가 다시 복원하는 방법입니다. 아래 글 내용에 나오는 코드를 고쳐봤습니다. 더보기 바보팀1님의 Hellow 난독화하기 글을 읽었습니다. 저는 python v3.8 환경을 사용하는데 여기에서는 동작하지 않아서 동작하도록 고쳐봤습니다. 버전별로 처리해보기 위해 코드를 문자화 하는데에 샐리님 블로그 글을 참조하였습니다. # 출처: https://qkqhxla1.tistory.com/485 # 참고: https://saelly.tistory.com/171 import sys v2 = """(lambda _, __, ___, ____, _____, ______, _______, ________: getattr( __import__(True.__class__.__name__[_] + []._..
유니코드 문자열을 숫자로 변환했다가 복원하기문자열을 숫자로 저장했다가 다시 복원하는 방법입니다. 아래 글 내용에 나오는 코드를 고쳐봤습니다. 더보기 바보팀1님의 Hellow 난독화하기 글을 읽었습니다. 저는 python v3.8 환경을 사용하는데 여기에서는 동작하지 않아서 동작하도록 고쳐봤습니다. 버전별로 처리해보기 위해 코드를 문자화 하는데에 샐리님 블로그 글을 참조하였습니다. # 출처: https://qkqhxla1.tistory.com/485 # 참고: https://saelly.tistory.com/171 import sys v2 = """(lambda _, __, ___, ____, _____, ______, _______, ________: getattr( __import__(True.__class__.__name__[_] + []._..
2020.10.26 -
try except로 오류 발생을 처리하다 보면 개발 도중에 자주 오류가 발생할 때 오류 추적이 쉽지 않은 경우가 있습니다. vscode로 실행을 직접 할 수 있는 경우라면 GUI로 편하게 디버깅 가능하지만, vscode 가 지원하지 않는 아키텍처(예를 들면, mips라든지, mips라든지...)인 경우에는 pdb 사용법을 익혀야 되는데 gdb처럼 맘껏 잘 동작하지는 않습니다. import traceback 을 하고 exception 발생했을 때 traceback.format_exc() 값을 출력해주면 됩니다. try: .... except Exception as e: print('ERROR::{}, {}'.format(e, traceback.format_exec())) 작성한지 시간이 지나서(수정 시간..
[python]오류 발생시 호출 스택 출력하기try except로 오류 발생을 처리하다 보면 개발 도중에 자주 오류가 발생할 때 오류 추적이 쉽지 않은 경우가 있습니다. vscode로 실행을 직접 할 수 있는 경우라면 GUI로 편하게 디버깅 가능하지만, vscode 가 지원하지 않는 아키텍처(예를 들면, mips라든지, mips라든지...)인 경우에는 pdb 사용법을 익혀야 되는데 gdb처럼 맘껏 잘 동작하지는 않습니다. import traceback 을 하고 exception 발생했을 때 traceback.format_exc() 값을 출력해주면 됩니다. try: .... except Exception as e: print('ERROR::{}, {}'.format(e, traceback.format_exec())) 작성한지 시간이 지나서(수정 시간..
2020.09.28 -
기록용으로 남깁니다.소스 코드 내app.run() 실행시 파라미터에 debug=True 추가명령줄 실행 시flask run 명령으로 실행한다면 이 명령 실행 전에 export FLASK_DEBUG=1 을 실행합니다. 윈도우면 set FLASK_DEBUG=1 을 하면 될 것 같습니다.
[python][flask] 소스 변경시마다 자동 갱신하기기록용으로 남깁니다.소스 코드 내app.run() 실행시 파라미터에 debug=True 추가명령줄 실행 시flask run 명령으로 실행한다면 이 명령 실행 전에 export FLASK_DEBUG=1 을 실행합니다. 윈도우면 set FLASK_DEBUG=1 을 하면 될 것 같습니다.
2020.09.15 -
대충 이해하고 쓰다가 오랜만에 소스를 보니 헷갈립니다.개인적으로 정리할 목적으로 글을 남깁니다. json.dumpjson.dumpsdump 계열은 파이썬의 객체(dict 등)를 다른 형태로 변환합니다.dump 함수는 파이썬 객체를 스트림 객체(파일 등)로 변환합니다.dumps 함수는 파이썬 객체를 한줄의(직렬화된) json 문자열로 변환합니다.오류Expecting value: json.loadjson.loadsload 계열은 대상을 파싱해서 파이썬의 객체(dict 등)로 변환합니다.load 함수는 스트림 객체(파일 등)에서 데이터를 읽어 파이썬 객체(dict 등)로 변환해줍니다.loads 함수는 json 문자열을 파싱해서 파이썬 객체로 변환해줍니다.오류Expecting value: line 1 colum..
[python] json dump/dumps/load/loads 구분하기대충 이해하고 쓰다가 오랜만에 소스를 보니 헷갈립니다.개인적으로 정리할 목적으로 글을 남깁니다. json.dumpjson.dumpsdump 계열은 파이썬의 객체(dict 등)를 다른 형태로 변환합니다.dump 함수는 파이썬 객체를 스트림 객체(파일 등)로 변환합니다.dumps 함수는 파이썬 객체를 한줄의(직렬화된) json 문자열로 변환합니다.오류Expecting value: json.loadjson.loadsload 계열은 대상을 파싱해서 파이썬의 객체(dict 등)로 변환합니다.load 함수는 스트림 객체(파일 등)에서 데이터를 읽어 파이썬 객체(dict 등)로 변환해줍니다.loads 함수는 json 문자열을 파싱해서 파이썬 객체로 변환해줍니다.오류Expecting value: line 1 colum..
2020.09.07 -
Popen 을 사용해서 하위 프로세스를 생성하는 구조인데 단순 데이터만 주고 받는 것을 상정하다가 사전 구조인 dictionary 데이터를 주고 받으려니 삽질을 길게 하게 되네요.. from subprocess import Popen, PIPE import json ...(중략)... for proc in self.list: proc = Popen(['python3', proc.name], stdin=PIPE, stdout=PIPE) ...(중략)... for proc in self.list: proc.stdin.write('hi kids\r\n'.encode()) proc.stdin.flush() 원래는 이런 구조였습니다. 하지만 write 하는 곳에서 dict 형태의 데이터를 넘겨야 할 필요가 생겼을..
[python] Popen 을 통해 dict 주고 받기Popen 을 사용해서 하위 프로세스를 생성하는 구조인데 단순 데이터만 주고 받는 것을 상정하다가 사전 구조인 dictionary 데이터를 주고 받으려니 삽질을 길게 하게 되네요.. from subprocess import Popen, PIPE import json ...(중략)... for proc in self.list: proc = Popen(['python3', proc.name], stdin=PIPE, stdout=PIPE) ...(중략)... for proc in self.list: proc.stdin.write('hi kids\r\n'.encode()) proc.stdin.flush() 원래는 이런 구조였습니다. 하지만 write 하는 곳에서 dict 형태의 데이터를 넘겨야 할 필요가 생겼을..
2020.08.12