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