개인적으로 진행하고 있는 프로젝트에서 Python을 이용하여 mac환경에서 wxPython으로 개발을
하고 있는데 wxPython이 mac 환경을 제대로 지원하지 않다보니 font의 인코딩 문제라던지 여러가지
자잘한 버그들이 많이 발생을 한다.
이번에도 클립보드에 있는 값을 가져오기 위해서 처음에는 wx에서 기본으로 지원하는 Clipboard함수를
사용하였는데 clipboard의 값을 제대로 가져오지 못하고 깨져서 나온다.
해당문제를 해결하는 방법을 찾아본 결과 mac에서는 방법이 두가지 있었다.
- subprocess 모듈을 이용하는 방법
2. PyObjC 모듈을 이용하는 방법
하나씩 보자~
개발 환경 :
mac os : 매버릭스, python : 2.7.9, wxPython : 3.0.2.0 1. subprocess 사용:
해당 모듈은 mac의 shall 스크립트의 명령어를 파이썬에서 사용할 수 있게 해준다. 해당 모듈은 파이썬 기본 모듈이다.
import subprocess
# GetClipboard
def getClipboardData():
p = subprocess.Popen(['pbpaste'], stdout=subprocess.PIPE)
retcode = p.wait()
content = p.stdout.read()
return content
# SetClipboard
def setClipboardData(_str):
p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)
p.stdin.write(_str)
p.stdin.close()
retcode = p.wait()
- PyObjC 모듈을 이용한 방법
-> ObjC를 python으로 랩핑한 것 objc의 기능들을 사용할 수 있다. 기본 모듈이 아니라서 따로 설치해야 한다.
PyObjC 설치 :
$ pip install -U pyobjc
from Foundation import *
from AppKit import *
# SetClipboard
def setClipboardData(_str):
p = NSPasteboard.generalPasteboard()
p.declareTypes_owner_([NSStringPboardType], None)
newStr = NSString.stringWithString_(_str)
newData = newStr.nsstring().dataUsingEncoding_(NSUTF8StringEncoding)
p.setData_forType_(newData, NSStringPboardType)
# GetClipboard
def getClipboardData
p = NSPasteboard.generalPasteboard()
content = p.stringForType_(NSStringPboardType)
return content
위의 두가지 방법 모두 글씨가 깨지는 문제 없이 정상적으로 작동하였으므로 편한걸 가져다가 사용하면 될듯 하다.
'IT/프로그래밍 > Python' 카테고리의 다른 글
Python에서 Dropbox SDK를 빌드할때 발생하는 bug 해결책 (0) | 2015.08.21 |
---|---|
Python 에서 Dropbox SDK 이용하기 (0) | 2015.08.17 |
PyCrypto를 이용해서 AES방식으로 암호화 하기 (0) | 2015.08.07 |
Python에서 I18N 적용하기 (0) | 2015.06.21 |
Python 두가지 상속 방법의 차이점 (0) | 2015.06.20 |