11월, 2016의 게시물 표시

파이썬에서 ShellExecuteEx로 인쇄하는 법

최근에 ShellExecute로 인쇄하는 방법에 대해 소개해드렸습니다. 이번에는 ShellExecuteEx로 인쇄하는 방법에 대해 소개해드립니다. (기본 프린터로 인쇄됩니다.) import win32event import win32process from win32com.shell.shell import ShellExecuteEx from win32com.shell import shellcon rc = ShellExecuteEx(lpVerb = 'print', lpFile = 'c\\파일경로\\파일.pdf', fMask = shellcon.SEE_MASK_NOCLOSEPROCESS | shellcon.SEE_MASK_DOENVSUBST # NOCLOSEPROCESS: 프로세스 핸들을 반환하도록 합니다. # DOENVSUBST: lpFile에 포함된 환경 변수를 실제 값으로 바꿔주도록 합니다. ) hproc = rc['hProcess'] win32event.WaitForSingleObject(hproc, win32event.INFINITE) exit_code = win32process.GetExitCodeProcess(hproc) 참고 자료 nullege https://sourceforge.net/projects/pywin32/ 관련 글: 파이썬에서 ShellExecute로 인쇄하는 법   파이썬에서 pywin32를 이용한 기본 프린터 변경법

파이썬에서 UUID 생성법

파이썬 2.5 이상부터 다음과 같이 간편하게 UUID를 생성할 수 있습니다. import uuid # uuid1()도 사용할 수 있습니다. # 단, uuid1은 컴퓨터의 정보를 기반으로 만든다는 점을 주의하시기 바랍니다. t = uuid.uuid4() print(t) # => UUID('d464b812-f57a-480e-9a58-1ab5795fd586') t = str(t) print(t) # => 'd464b812-f57a-480e-9a58-1ab5795fd586' t = t.replace('-', '') print(t) # => 'd464b812f57a480e9a581ab5795fd586' 참고 자료: "UUID objects according to RFC 4122": https://docs.python.org/2/library/uuid.html http://stackoverflow.com/questions/534839/how-to-create-a-guid-uuid-in-python

파이썬에서 멀티 프로세싱으로 생산자-소비자 문제 구현

파이썬에서 멀티 프로세싱을 구현해보았습니다. 생산자 함수와 소비자 함수는 각각 별도의 프로세스에서 실행되며, 메인 프로세스는 일정 시간이 지난 후 각 프로세스를 종료 시킵니다.

파이썬에서 pywin32를 이용한 기본 프린터 변경법

파이썬 라이브러리 중 pywin32 라는 것이 있습니다. win32 api들을 파이썬에서 쉽게 사용할 수 있도록 해주는 라이브러리입니다. 이 라이브러리를 이용해서 기본 프린터를 변경하는 방법은 다음과 같습니다.

특정 시점부터 ::GetDC(NULL)가 NULL을 반환하는 문제의 원인.

윈도 OS에서 프로그램 실행 중 어느 시점부터 갑자기 이미지 처리 함수가 제대로 동작하지 않는 문제가 발견되었습니다. DC를 이용해서 특정 텍스트를 출력하는 함수인데 프로그램 실행 초기에는 잘되다가 어느 정도 시간이 지나면 안되더군요.. 로그를 찍어서 분석해보니 해당 함수 내에 ::GetDC(NULL)를 이용해서 DC를 가져오는 부분이 있는데, 이상하게도 일정 시간이 지나면 항상 ::GetDC(NULL)가 NULL을 반환했습니다. 즉, 텍스트가 출력되지 않는 것은 DC를 가져오지 못했기 때문이었습니다. 그렇다면 왜 ::GetDC(NULL)이 NULL을 반환했을까요? 여러 원인이 있을 수 있겠지만 제 경우에는 DC 객체 자원 누수 때문이었습니다. 해당 프로그램에서 사용하는 DLL 중 하나에서 ::GetDC()를 한 후 ::ReleaseDC()를 하지 않는 버그가 있었고, 이 때문에 서서히 DC 객체 자원이 누수되어 이런 문제가 발생한 것이었습니다. 예시... [원래 코드(잘못된 코드)] int nTmp = GetDeviceCaps( ::GetDC(NULL) , LOGPIXELSY); [수정된 코드] CDC* pDC = ::GetDC(NULL); int nTmp = GetDeviceCaps( pdc , LOGPIXELSY); ::ReleaseDC(NULL, pdc); pdc = NULL; - 2017. 7. 28 : 잘못된 내용 수정 및 예제 코드 추가.

파이썬에서 ShellExecute로 인쇄하는 법

파이썬 라이브러리 중 pywin32 라는 것이 있습니다. win32 api들을 파이썬에서 쉽게 사용할 수 있도록 해주는 라이브러리입니다. 이 라이브러리를 이용해서 ShellExecute로 인쇄하는 방법은 다음과 같습니다. (기본 프린터로 인쇄됩니다.)