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


답변:


104

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를 호출 한 후 클립 보드에 개체를 배치하지 마십시오.


6
'with'문을 사용하는 방법이 있는지 아십니까?
Norfeldt

3
주목할만한 점은 py34, win7에서 SetClipboardText는 EmptyClipboard에 대한 선행 호출 없이는 작동하지 않았습니다.
CoderTao

이 모듈은 클립 보드에서 HTML 형식의 내용을 가져 오는 등보다 복잡한 작업을 수행하려는 경우에 유용합니다. 참조 stackoverflow.com/questions/17298897/...
xji

2
네이티브 방법이없는 경우 @Norfeldt, 당신은 쉽게 사용자 정의 개체를 만들 수 있습니다 "와"지원
Elijas

39

기본적으로 GUI 라이브러리 인 내장 모듈 Tkinter 를 통해 쉽게 수행 할 수 있습니다 . 이 코드는 OS에서 클립 보드 콘텐츠를 가져 오기 위해 빈 위젯을 만듭니다.

#from tkinter import Tk  # Python 3
from Tkinter import Tk
Tk().clipboard_get()

2
이 코드에 주석을 추가하고 (가능하면) 멋진 문서에 대한 링크를 추가하십시오.
jb.

6
tkinter대신 이어야합니다 Tkinter. 그렇지 않으면 내 파이썬 3.7.3 64bit win10에서 작동하지 않았습니다.
jerik

21

win32 모듈 사용에 대한 많은 제안을 보았지만 Tkinter는이 게시물에서 본 것 중 가장 짧고 쉬운 방법을 제공합니다. Python을 사용하여 Windows에서 클립 보드에 문자열을 어떻게 복사합니까?

또한 Tkinter는 파이썬 표준 라이브러리에 있습니다.


3
Tkinter를 통해 클립 보드 값을 가져 오는 코드 : from Tkinter import Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs

18

추가 패키지를 설치하지 않으려면 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())

Windows 10에서는 작동하지 않는 것 같습니다. 항상 "없음"으로 인쇄됩니다.
Aran-Fey

Windows 10은 Python 32 비트를 사용하는 한 잘 작동했습니다. 64 비트에서도 작동하도록 답변을 업데이트했습니다.
kichik

"text = ctypes.c_char_p (data_locked)"줄에 "expected char pointer, got int"라는 오류가 표시됩니다.
txemsukr

클립 보드에 텍스트를 복사하는 유사한 솔루션을 보는 것도 좋을 것입니다.
mrkbutty

14

이것이 파이썬에서 클립 보드에 액세스하는 가장 쉬운 방법이라는 것을 알았습니다.

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 문자로도 작동하는 것 같습니다. 테스트 된 문자에는 ± ° ©© αβγθΔΨΦåäö가 포함됩니다.


3.6에 적합합니까? 성공적으로 설치되었지만 paste () 메서드를 사용하면 오류가 발생합니다. "from PySide import version as PYSIDE_VERSION # analysis : ignore ModuleNotFoundError : No module named 'PySide'". 내가 Pyside를 설치하려고했을 때 3.6에서는 지원되지 않는다고합니다
gaurav

예, Python 3.6에서 작동해야하며 방금 Python 3.7.4 (64 비트)로 테스트했습니다. 패키지 의 setup.py 를 보면 Pyside 또는 다른 패키지에 대한 종속성이 없어야합니다. 붙여 넣기 명령이 Pyside를 사용하려는 것이 확실합니까?
np8

예, 붙여 넣기 명령은 Pyside를 찾고 있으며 Pyside는 파이썬 3.4까지만 지원하므로 오류가 발생합니다
gaurav

python3.6을 사용하는 WSL에 대한 가장 간단한 솔루션 인 것 같습니다
enoted

11

위의 가장 많이 찬성 된 답변은 단순히 클립 보드를 지운 다음 내용을 가져 오는 방식 (그런 다음 비어 있음)이라는 점에서 이상합니다. "포맷 된 텍스트"와 같은 일부 클립 보드 내용 유형이 클립 보드에 저장하려는 일반 텍스트 내용을 "덮지"않도록 클립 보드를 지울 수 있습니다.

다음 코드는 클립 보드의 모든 줄 바꿈을 공백으로 바꾼 다음 모든 이중 공백을 제거하고 마지막으로 콘텐츠를 클립 보드에 다시 저장합니다.

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

7

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

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


3

콘솔 프로그램 의 경우 .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 ()는 프레임이 밀리 초 동안 표시되는 것을 방지 한 다음 제거되어 콘솔에 다시 초점을 맞 춥니 다.


2

Pythons 라이브러리 클립 보드 사용

단순히 다음과 같이 사용됩니다.

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  

8
이것은 본질적으로 pyperclip을 사용합니다. 이 모듈의 전체 소스 코드는 말 그대로 from pyperclip import copy, paste.
pbreach

1

그리 직접적인 트릭은 아닙니다.

pyautogui 핫키 사용 :

Import pyautogui
pyautogui.hotkey('ctrl', 'v')

따라서 원하는대로 클립 보드 데이터를 붙여 넣을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.