파이썬에서 (Windows) 클립 보드의 텍스트를 어떻게 읽습니까?
답변:
pywin32의 일부인 win32clipboard 라는 모듈을 사용할 수 있습니다 .
다음은 먼저 클립 보드 데이터를 설정 한 다음 가져 오는 예입니다.
import win32clipboard
# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()
# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data
문서의 중요한 알림 :
창이 클립 보드 검사 또는 변경을 마치면 CloseClipboard를 호출하여 클립 보드를 닫습니다. 이렇게하면 다른 창에서 클립 보드에 액세스 할 수 있습니다. CloseClipboard를 호출 한 후 클립 보드에 개체를 배치하지 마십시오.
기본적으로 GUI 라이브러리 인 내장 모듈 Tkinter 를 통해 쉽게 수행 할 수 있습니다 . 이 코드는 OS에서 클립 보드 콘텐츠를 가져 오기 위해 빈 위젯을 만듭니다.
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinter
대신 이어야합니다 Tkinter
. 그렇지 않으면 내 파이썬 3.7.3 64bit win10에서 작동하지 않았습니다.
win32 모듈 사용에 대한 많은 제안을 보았지만 Tkinter는이 게시물에서 본 것 중 가장 짧고 쉬운 방법을 제공합니다. Python을 사용하여 Windows에서 클립 보드에 문자열을 어떻게 복사합니까?
또한 Tkinter는 파이썬 표준 라이브러리에 있습니다.
추가 패키지를 설치하지 않으려면 ctypes
작업도 완료 할 수 있습니다.
import ctypes
CF_TEXT = 1
kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes = [ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p
def get_clipboard_text():
user32.OpenClipboard(0)
try:
if user32.IsClipboardFormatAvailable(CF_TEXT):
data = user32.GetClipboardData(CF_TEXT)
data_locked = kernel32.GlobalLock(data)
text = ctypes.c_char_p(data_locked)
value = text.value
kernel32.GlobalUnlock(data_locked)
return value
finally:
user32.CloseClipboard()
print(get_clipboard_text())
이것이 파이썬에서 클립 보드에 액세스하는 가장 쉬운 방법이라는 것을 알았습니다.
1) pyperclip 설치 :
pip install pyperclip
2) 사용법 :
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
Win10 64 비트, Python 3.5 및 Python 3.7.3 (64 비트)에서 테스트되었습니다. 비 ASCII 문자로도 작동하는 것 같습니다. 테스트 된 문자에는 ± ° ©© αβγθΔΨΦåäö가 포함됩니다.
위의 가장 많이 찬성 된 답변은 단순히 클립 보드를 지운 다음 내용을 가져 오는 방식 (그런 다음 비어 있음)이라는 점에서 이상합니다. "포맷 된 텍스트"와 같은 일부 클립 보드 내용 유형이 클립 보드에 저장하려는 일반 텍스트 내용을 "덮지"않도록 클립 보드를 지울 수 있습니다.
다음 코드는 클립 보드의 모든 줄 바꿈을 공백으로 바꾼 다음 모든 이중 공백을 제거하고 마지막으로 콘텐츠를 클립 보드에 다시 저장합니다.
import win32clipboard
win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('\n', ' ')
c = c.replace('\r', ' ')
while c.find(' ') != -1:
c = c.replace(' ', ' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()
win32all 패키지에서 win32clipboard를 사용해보십시오 (ActiveState Python을 사용하는 경우 설치되었을 수 있음).
여기에서 샘플을 참조하십시오 : http://code.activestate.com/recipes/474121/
내 콘솔 프로그램 의 경우 .destroy ()가 항상 오류를 제공했기 때문에 위의 tkinter에 대한 답변이 나에게 적합하지 않았습니다.
"event"명령을 호출 할 수 없습니다 : 실행하는 동안 응용 프로그램이 파괴되었습니다 ...
또는 .withdraw ()를 사용할 때 콘솔 창에서 포커스를 다시 얻지 못했습니다.
이를 해결하려면 .destroy () 전에 .update ()를 호출해야합니다. 예:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
r.withdraw ()는 프레임이 밀리 초 동안 표시되는 것을 방지 한 다음 제거되어 콘솔에 다시 초점을 맞 춥니 다.