[python] 파이썬에서 (Windows) 클립 보드의 텍스트를 어떻게 읽습니까?

파이썬에서 (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()


답변

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()


답변

파이썬 표준 라이브러리가합니다 …

try:
    # Python3
    import tkinter as tk
except ImportError:
    # Python2
    import Tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()