Language/Python 67

[pywebview] "X" 버튼 (close) 누르면 webview hide 하도록 구현

Window UI 에서 오른쪽 위 X 버튼을 누르면 창이 사라지고 tray 의 Show 메뉴를 누르면 다시 나타나는 기능을 구현하고자 한다. 이를 위해 링크(API | pywebview (flowrl.com))를 검토해 보니 closing event를 처리하는 on_closing 내에서 False 를 return 하면 close 처리를 하지 않는다는 것을 확인했다. 이에 아래와 같이 on_closing 구문내에 hide 기능을 넣고 False를 return 하면 될 것으로 생각하고 구현하였지만, 해당 구문을 타게 되면 CPU 를 100%를 먹으면서 프로그램이 "응답 없음"이 되버리면서 죽어 버렸다. def webview_subprocess(conn_parent, conn_child): ... window..

Language/Python 2021.09.12

[pywebview] pystray를 이용한 hide/show 제어

pystray 로 Windows tray 를 이용하여 program을 제어할 수 있다. (pytray 아니고 pystray) pystray · PyPI [pystray 를 이용해 tray에서 Hide, Show, Quit 기능 추가] import pystray from pystray import MenuItem from pystray import Menu ... image_path = Image.open(base_path + '/res/tray_icon.png') menu = Menu(MenuItem('Hide', lambda: send_cmd_to_window(parent_pipe, 'hide')), MenuItem('Show', lambda: send_cmd_to_window(parent_pipe, ..

Language/Python 2021.09.12

[pywebview] subprocess 를 이용한 pywebview 분리 실행

pywebview를 실행하면 main thread 내에서 다른 코드 수행이 불가능하다. 이에 별도의 process로 분리하여 pywebview를 수행시키면 별도의 코드를 수행할 수 있다. pywebview using subprocess · TechNoteGit/pywebview_example@540c4c9 (github.com) import webview from multiprocessing import Process, Pipe def webview_subprocess(child_pipe): window = webview.create_window('TechNote', 'https://technote.kr') webview.start(cmd_recv, [window, child_pipe], gui='cef..

Language/Python 2021.09.11

[pyinstaller] TypeError: an integer is required (got type bytes)

pyinstaller 로 작업하다 "TypeError: an integer is required (got type bytes)" 에러가 발생하였다. 이와 같이 에러가 발생할 때는 pyinstaller의 버전을 업그레이드하면 문제가 해결된다. [pyinstaller 업데이트] PS D:\workspace\pywebview_example> pip install --upgrade pyinstaller Requirement already satisfied: pyinstaller in d:\python38\lib\site-packages (3.3.1) Collecting pyinstaller Downloading pyinstaller-4.5.1-py3-none-win_amd64.whl (1.9 MB) |█████..

Language/Python 2021.09.11

Python - pipenv 설정 및 사용

기본 python 환경과 별도로 사용할 수 있는 가상 환경 제공 원하는 python 버전을 설정하여 사용 해당 가상 환경만을 위한 python library 를 설치 Pipfile, Pipfile.lock (pip 설정 파일) 을 기반으로 python library 일괄 설치 pyinstaller 사용하여 변환시 꼭 필요한 library 만으로 최적화 변환 : pipenv 없이 pyinstaller로 exe 실행 환경 생성할 경우 기본 python 환경에서 수행시 설치된 python library 를 기준으로 생성하기 때문에 불필요한 library 들로 인해 변환 용량이 커짐. pipenv 를 사용하여 필요한 library 만 설치한 환경 이용시 최적화하여 변환 가능. pipenv Github : htt..

Language/Python 2021.06.27

Python - pywinauto, Microsoft Windows GUI 제어 자동화

pywinauto WebSite : http://pywinauto.github.io/ Github : https://github.com/pywinauto/pywinauto Doc : https://pywinauto.readthedocs.io/en/latest Microsoft Windows GUI 제어를 자동화할 수 있는 Python Module 설치 > pip3 install pywinauto (pywinauto 설치시 six, comtypes, pywin32 또한 의존성에 의해 자동 설치된다.) 사용의 예 1) "메모장" 실행 후 "Sample" 문자열을 입력하는 예제 from pywinauto.application import Application app = Application(backend="u..

Language/Python 2020.02.29

Python - PyInspect 설치 및 실행

1) https://github.com/pywinauto/py_inspect 에 접속하여 code 다운로드 2) python 3.5 이상, pywinauto, PyQt5 설치 3) "python py_inspect.py" 으로 실행 특이사항 1) 실행시 2회 실패 후 3회시 부터 정상 실행됨. 1회 실패시 에러 내용 D:\workspace\py_inspect-master>python py_inspect.py QWindowsContext: OleInitialize() failed: "COM error 0xffffffff80010106 RPC_E_CHANGED_MODE (Unknown error 0x080010106)" Traceback (most recent call last): File "py_inspe..

Language/Python 2020.02.28

Python - reduce(), 인자를 누적적으로 적용하여 결과를 반환

reduce >>> functools.reduce(function, iterable[, initializer]) iterable 한 data를 왼쪽에서 오른쪽으로 누적적으로 fuction 의 인자로 넣어 하나의 결과를 반환하는 함수 python2 에서는 builtin 함수로 바로 사용할 수 있었지만 python3 에서는 functools 모듈의 함수로 포함되어 있다. [Link : iterable 과 iterator, 그리고 반복문] functools.reduce(function, iterable[, initializer]) Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to r..

Language/Python 2020.02.23

Python - filter(), iterable 변수 내 값 중 조건에 맞는 값만 반환

filter >>> filter(function, iterable) iterable 한 data를 function 의 인자로 넣어 False 가 아닌 결과를 반환하는 인자들만 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] filter(function, iterable) Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity fu..

Language/Python 2020.02.22

Python - map(), 함수와 iterable 변수를 인자로 받아 iterator 결과를 반환

map >>> map(func, *iterables) iterable 한 data를 func 의 인자로 넣어 나온 결과들을 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] map(function, iterable, ...) Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With ..

Language/Python 2020.02.19

Python - iterable 과 iterator, 그리고 반복문

iterable 의 정의 및 이해 iterator 의 정의 및 이해 iterable 의 정의 및 이해 iterable : 한 번에 하나의 member를 반환할 수 있는 object (객체)를 의미. iterator 로 변환이 가능. list, str, tuple 와 같은 모든 Sequence type dict, file object 혹은 sequence semantic 을 가진 __iter__() method 나 __getitem__() method 가 구현된 object iterable 은 for loop 나 sequence 가 필요한 zip(), map() 등에 사용될 수 있다. 일반적으로 iterator 로 변환 후 사용된다. iter() 를 이용해 해당 object의 iterator를 생성하여 사..

Language/Python 2020.01.02

Python - 문자열(str)/바이트(bytes) 시퀀스와 인코딩(encoding)/디코딩(decoding)

문자열(str) : 사람이 인지 가능한 문자의 형태. Python에서는 유니코드 문자를 기반으로 문자열 표시. (유니코드 문자를 나타내는 하나하나의 문자의 단위 원소를 코드 포인트라고 함.) 바이트(bytes) 시퀀스 : 기계가 처리하는 문자의 형태. 문자를 표현하는 실제 바이트. 인코딩(encoding) : 유니코트 문자로 표현되는 문자열을 바이트 시퀀스로 변환 디코딩(decoding) : 바이트 시퀀스를 유니코드 문자로 변환

Language/Python 2019.11.28

Python - Sequence Type을 Slice 하기

Python 은 데이터에 순서를 붙여 나열한 Sequence Type 으로 리스트(list), 튜플(tuple), 범위(range), 문자열(string) 등 여러 가지 형태를 제공한다. Python 은 이렇게 나열된 데이터들을 쪼갤(Slice) 수 있는데, ":" 을 slice notation 으로 하여 아래와 같은 기능을 제공하고 있다. Python Sequence Type 의 Slice Notation 기본 문법 variable[start:stop:step] [slice() 함수를 이용한 sequence type 변수 나누기] start, stop 의 값이 양수 일 경우 인덱스 처음을 기준으로 시작하고, 음수 일 경우 인덱스 끝을 기준으로 시작한다. step 의 양수/음수에 따라 결과의 방향이 바뀌..

Language/Python 2019.11.25

Python - with, context manager에 대한 이해.

특정 구문을 시작 전후 반드시 실행해야 하는 구문이 있다면 Python에서는 어떻게 구현할 것인가. 일반적인 코드로 구현하자면 다음과 같다. print("->> Before routine") routine1() print(" Before routine") routine2() print(" Before routine") routine3() print("> Before routine") try: routine1() finally: print(" Before routine") try: routine2() finally: print(" Before routine") try: routine3() finally: print("> Before routine") def __exit__(self, type, value,..

Language/Python 2019.11.16

Python - configparser, 기본적인 설정파일을 다루는 모듈

configparser.ConfigParser() configparser 모듈은 ConfigParser class 를 제공하고, ConfigParser class 는 Microsoft Windows의 INI 와 같은 형식의 설정파일 구조를 다룰 수 있다. [sample.ini] [KeyList] # Set Key Value Key1 = 10 Key2 = 20 Key3 = 30 Key4 = 40 Key5 = 50 [NameList] # Set Name Value Name1 = abc Name2 = bcd Name3 = cde Name4 = def Name5 = efg 위와 같은 형태의 설정 파일을 읽기 위해서 다음과 같은 코드를 사용할 수 있다. from configparser import ConfigPa..

Language/Python 2019.10.11

Python - 지능형 리스트 (List Comprehension)/제너레이터 표현식 (Generator expression) 의 이해 및 비교

지능형 리스트 (List Comprehension) : Python 에서는 리스트 구성을 위해 항목을 하나하나 나열하는 방식외에 구문을 통해 sequence 형태의 데이터를 가공하여 리스트를 구성하는 방법을 제공하고 있다. 지능형 리스트를 사용하게 되면 코드가 간결해지고 상황에 따라서는 성능이 좋은 코드를 작성할 수 있다. 제너레이터 표현식 (Generator expression) : 지능형 리스트 (List Comprehension) 과 유사하지만 별도의 리스트는 생성하지 않고, iterator 를 생성하여 항목을 하나씩 처리할 수 있도록 한다. 지능형 리스트를 만든 후 하나씩 항목을 처리하여도 되지만 별도의 메모리 공간을 차지하지 않는다는 차이점이 있다. 지능형 리스트의 경우 대괄호 [] 를 사용하는..

Language/Python 2019.09.13

Python - random(), 임의의 수(난수)를 구하는 함수

가장 흔히 사용되는 기능으로 random 값을 생성하는 random() 함수가 있다. 해당 함수를 사용하기 위해서는 별도의 random module을 import 하여 사용해야 한다. 직접 난수를 구하는 로직을 작성해 본 사람을 알겠지만 규칙이 없는 난수를 생성하기는 쉽지가 않다. 질 좋은 난수 생성기더라도 경우의 수를 늘려 생성하다 보면 어느 순간 규칙을 가지는 것을 확인하는 경우가 다수이기 때문이다. 이를 극복하기 위해 난수 생성하는 로직이 제안되고 존재하는데 Python 에서는 Mersenne Twister 라는 난수 생성기를 사용한다. 하지만 이 난수 생성 로직도 특정 상황에서 다음 난수를 예측할 수 있기 때문에 암호 관련 목적으로 random 모듈로 부터 생성된 난수 사용은 권장하지 않고 있다...

Language/Python 2019.03.20

Python - Python 2 에서 Python 3 으로의 전환

PYthon을 처음 접한지 몇년이 지났지만 Python 3에 대한 거부감(?), 두려움(?)은 상당했다. 우선 접하고 있던 Python code들은 모두 2.7을 기준으로 작성되어 있었고, 나 또한 그 틀에서 벗어났을 때 코드가 동작하지 않을 수도 있다는 점에서 상호 호환이 되지 않는 Python 3으로의 전환은 어려웠다. 하지만 수년내 python 2.7 의 지원이 종료될 예정임에 따라, 최근 신규로 작성하는 코드를 모두 Python 3로 작성을 시작해 보았다. 내부적으로는 많은 차이가 있겠지만 자체적으로 느꼈던 차이점은 다음과 같았다. 1. print 문 사용의 변화 기존 python 2에서는 print "ABC" 와 같이 사용이 가능하였으나 Python3 에서는 함수사용과 마찬가지로 중괄호를 넣어줘..

Language/Python 2019.03.19

Python - id(), object의 unique 값(memory address)를 보여주는 함수

Python은 C 언어와 달리 포인터라는 개념이 없다. 하지만 컴퓨터 상에서 돌아가는 언어이기 때문에 내부적으로는 메모리를 사용하고, 이에 대한 주소 정보를 가지고 있다. 그렇다면 포인터 개념을 사용하지 않는 Python에서 해당 메모리 주소는 어떤 용도로 사용되는 것일까? Python은 메모리 주소를 변수를 구별하기 위한 용도로 사용하고 있다. python의 built-in 함수 중 id() 를 이용하면 현재 확인하고자 하는 변수의 메모리 주소를 확인할 수 있다. (CPython의 경우 메모리 주소를 반환하지만, 다른 파이썬 인터프리터는 메모리 주소 이외의 다른 값을 반환할 수 있음) id(object)Return the “identity” of an object. This is an integer w..

Language/Python 2019.03.18

Python - if __name__ == __main__ 의 의미

[Python 스크립트 파일의 실행] python은 C언어나 Java 와 달리 main() 함수가 존재하지 않는다.이에 따라 스크립트 파일을 실행하게 되면 들여쓰기가 되지 않은 line들을 파일 상단 부터 순차적으로 읽어 수행하게 된다. [sample.py]a = 1b = 3c = a + b print(c) def temp(): print("abc") ~/python$ python sample.py4 위에서 보듯이 들여쓰여진 코드인 함수 부분은 수행되지 않았음을 볼 수 있다. [다른 Python 스크립트 파일을 모듈로서 실행] python 스크립트 파일은 또 다른 python 스크립트 파일을 하나의 모듈로써 읽어 들일 수 있다. [sample_call.py]import sample ~/python$ py..

Language/Python 2019.02.08

Python - package와 module의 차이

Python에 있어 module은 하나의 python 코드 파일을 의미한다. 파일 이름 자체가 module을 나타내는 이름이다. 반면 package는 module을 모아 놓은 directory 구조하고 할 수 있다. module 과 package 사용의 예> import ModuleName import PackageNamefrom PackageName import ModuleName import를 하게 되면 해당 ModuleName 혹은 PackageName 이 Loading 상태인지 확인 후 Loading이 되지 않은 상태라면 다음의 위치에서 존재를 확인한다. 1) sys.path 에 선언된 위치2) 현재 실행 위치 Ubuntu 14.04 python 2.7에서 sys.path를 확인해 보면 다음과 같..

Language/Python 2018.06.16

Python - datetime/time module, 현재 시간 출력 방법

datetime 혹은 time module 중 하나를 이용하여 현재 시간을 표시할 수 있다. 먼저 datetime 을 이용한 현재 시간 표현은 다음과 같다. import datetime now = datetime.datetime.now() print now 결과> $ python now_datetime.py 2018-06-05 10:30:06.986065 반면 time module을 이용하면 좀 더 세분화/정교화하여 표시할 수 있다. import time now = time.localtime() print "%04d/%02d/%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) 결과..

Language/Python 2018.06.16

Python - email package, raw email message 다루기

poplib 를 이용해 raw email message를 받아오더라도 MIME (Multipurpose Internet Mail Extensions, 전자 우편을 위한 인터넷 표준 포맷)이기 때문에 막상 출력해 보면 알아보기 힘든 문자열들로 표현되어 있다. 이에 따라 원하는 값을 추출하기 위해 추가적인 코드를 작성하여야 한다. MIME 형식의 raw email message를 parsing 하기 위해서는 python의 email package를 사용하면 된다. poplib의 M.retr()[1] 을 통해 구한 raw email string은 아래의 코드를 통해 하나의 string으로 표현이 가능하다. raw_email = b"\n".join(M.retr(mList+1)[1]) 이렇게 구해진 raw_ema..

Language/Python 2018.06.15

Python - poplib, POP3 를 통한 이메일 수신

이메일을 웹 Interface가 아닌 별도의 프로그램을 통해 수신하기 위해서는 POP3 혹은 IMAP 을 사용하여야 한다. 가볍게는 POP3가 많이 사용되고, 좀 더 구체적인 기능을 위해서는 IMAP을 사용하면 된다. python에서 POP3을 사용해 이메일 수신하는 방법 python2 : https://docs.python.org/2/library/poplib.html python3 : https://docs.python.org/3/library/poplib.html python2나 python3나 POP3를 위한 python library - poplib 를 가지고 있다. 간단하게 네이버 메일에서 POP3를 통해 이메일을 수신하는 코드를 살펴보자. import getpass, poplib M = po..

Language/Python 2018.06.15

Python - divmod(), 두 숫자를 나누어 몫과 나머지를 tuple로 반환하는 함수

divmod >>> divmod(x, y) 두 숫자를 인자로 전달 받아 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환한다. __builtin__ module에 포함된 function 이다. argument x - 복소수(complex)가 아닌 숫자.y - 복소수(complex)가 아닌 숫자. return value 몫과 나머지를 tuple로 반환한다. example 모든 인자가 양의 정수일 경우) >>> divmod(4,2) (2, 0) >>> divmod(8,3) (2, 2) 인자 중 음의 정수가 있을 경우) >>> divmod(10,-3) (-4, -2) >>> divmod(-10,-3) (3, -1) >>> divmod(-10,3) (-4, 2) 인자 중 실수가 있을 경우..

Language/Python 2018.01.13

Python - callable(), 호출 가능한 object 여부를 판단하는 함수

callable >>> callable(object) 전달받은 object 인자가 호출 가능한지 여부를 판단한다. __builtin__ module에 포함된 function 이다. argument object - 호출 가능 여부를 판단할 object 인자 하나를 넘겨준다. return value 인자로 전달받은 object가 호출 가능한 object일 경우 True, 아닐 경우 False를 반환한다. example 호출 불가능한 변수형 object 와 호출 가능한 함수형 object 의 예) >>> sample = 1 >>> callable(sample) False >>> def funcSample(): ... print('sample') ... >>> sample = funcSample >>> call..

Language/Python 2018.01.12

Python - dir(), object의 속성(attribute) 목록을 보여주는 함수

dir >>> dir([object]) 전달받은 object 인자의 속성 목록(attribute list)를 보여준다. 만약 아무런 인자가 전달되지 않았다면 현재 local scope내 사용 가능한 모듈(module) 혹은 object 목록이 표시된다. __builtin__ module에 포함된 function 이다. argument object (optional) - dir() 함수는 object가 가지는 모든 속성(attribute)들을 반환한다. return value 인자로 전달받은 object의 유효한 속성들의 목록을 반환한다. example dir() 함수 사용시 argument가 없는 경우) >>> dir() ['__builtins__', '__doc__', '__name__', '__pac..

Language/Python 2018.01.12

Python - int(), 정수(integer)를 반환하는 클래스

int >>> int(x=0)>>> int(x, base=10) 전달한 숫자 혹은 문자열, x를 기반으로 정수 값을 돌려준다.만약 인자가 없다면 기본 값 0을 돌려준다. 인자가 숫자일 경우, plain integer, long integer, floating point number가 입력될 수 있다. plain integer의 경우 int 형으로 반환하고, long integer의 경우 long 형으로 반환한다. (참고> plain integer와 long integer 범위)반면 floating point number의 경우는 소수점 이하는 버리고 int 혹은 long 형으로 반환한다. 인자가 앞서 언급한 숫자형이 아니거나 base(진법) 인자가 같이 넘어올 경우 문자열이나 unicode object가..

Language/Python 2018.01.04