파이썬을 사용하여 Windows에서 문자열을 클립 보드에 복사하는 방법은 무엇입니까?


193

사용자 입력으로 문자열을 작성한 다음 클립 보드에 추가하는 기본 Windows 응용 프로그램을 만들려고합니다. 파이썬을 사용하여 문자열을 클립 보드에 복사하는 방법은 무엇입니까?


4
이 질문과 관련 있습니다.
glglgl

jaraco.clipboard는 (너무) 않습니다 : clipboard.copy (variable)
JinSnow

또한 창을 표시하지 않고 Tkinter를 사용하여 클립 보드에 복사하는 방법에 대한 관련 질문에 대한 답변 을 참조하십시오 . Tkinter를 사용하여 클립 보드 텍스트를 바꾸거나 반환하는 Python 함수가 포함되어 있습니다.
Edward

답변:


286

사실, pywin32그리고 ctypes이 간단한 작업에 대한 잔인한 것 같다. Tkinter크로스 플랫폼 GUI 프레임 워크로, 기본적으로 Python과 함께 제공되며 다른 멋진 기능과 함께 메서드에 액세스하는 클립 보드가 있습니다.

필요한 모든 텍스트를 시스템 클립 보드에 넣으면됩니다.

from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

그리고 그게 전부입니다. 플랫폼 별 써드 파티 라이브러리를 엉망으로 만들 필요가 없습니다.

파이썬 3를 사용하는 경우, 교체 TKinter와 함께 tkinter.


55
클립 보드의 내용 얻기 : result = r.selection_get (selection = "CLIPBOARD")
MJ

34
@SurDin Tkinter는 파이썬 3에서 tkinter로 이름이 바뀌 었으므로 사용중인 버전에 따라 다릅니다.
정직한 아베

24
클립 보드의 내용을이 기능으로 붙여 넣은 후 모든 앱이 응답하지 않아 이상하게도 결과가 올바르게 작동합니다.
Bartlomiej Lewandowski 2019

14
전화하지 않으면 작동합니다 r.destroy(). 호출하면 클립 보드가 비워지고 Ctrl-V를 누르면 대상 앱이 정지 될 수 있습니다. (OS : Windows 7 x64)
netvope

8
나에게 이것은 python 3.4에서는 작동하지 않지만 python 2.7에서는 작동합니다 (예, Tkinter 대신 tkinter 사용)
Matty

79

해결책이 없었으며 해결 방법 만 있습니다.

Windows Vista에는 clip명령 줄에서 명령 출력을 가져와 클립 보드에 넣는 명령이 내장 되어 있습니다. 예를 들어ipconfig | clip .

그래서 os내장 된 Windows 솔루션을 사용하여 문자열을 가져와 클립 보드에 추가 하는 모듈 로 기능을 만들었습니다 .

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

# Example
addToClipBoard('penny lane')

# Penny Lane is now in your ears, eyes, and clipboard.

그러나 주석에서 이전에 언급 했듯이이 접근법의 단점 중 하나는 echo명령이 텍스트 끝에 줄 바꿈을 자동으로 추가한다는 것입니다. 이를 피하기 위해 수정 된 버전의 명령을 사용할 수 있습니다.

def addToClipBoard(text):
    command = 'echo | set /p nul=' + text.strip() + '| clip'
    os.system(command)

Windows XP를 사용하는 경우 Windows XP Pro의 명령 프롬프트에서 클립 보드로 바로 복사하여 붙여 넣기 단계를 수행 하면 됩니다.


20
text포함 하면 어떻게됩니까 | calc.exe ?
Willi Ballenthin

2
@WilliBallenthin 그런 다음 큰 따옴표로 묶어야합니다. 그러나 큰 따옴표가 포함되어 있으면 어떻게해야합니까? 그런 다음 큰 따옴표를 두 배로 늘려야합니다. text with " quotes and | pipe된다 "text with "" quotes and | pipe" 이 95 세 이상 창문 시스템에 문제가있을 수 있지만
ColBeseder

5
매우 안전하지 않은 기능 ... 클립 보드로 전송 된 컨텐츠는 이제 엔트리 벡터가되어 공격 영역을 증가시킵니다.
Phil L.

2
또한 개행을 지원해야하므로을 사용하도록 수정했습니다 type. 텍스트를 파일에 쓰고 명령을 사용합니다 type myfile.txt | clip.
Mixopteryx

1
이것이 나에게 가장 좋은 대답이지만 문제가 있습니다 (Python 3.5, Windows 10). 원하지 않는 줄 바꿈은 항상 문자열 끝에 추가됩니다. 그것을 피하는 방법?
mmj

42

ctypes를 사용하여 Windows API를 활용하고 대규모 pywin32 패키지를 피할 수도 있습니다. 이것이 내가 사용하는 것입니다 (가난한 스타일을 용서하지만 아이디어는 있습니다).

import ctypes

# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard    # Basic clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc    # Global memory allocation
gl = ctypes.windll.kernel32.GlobalLock     # Global memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000

def Get():
  ocb(None) # Open Clip, Default task

  pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy...

  data = ctypes.c_char_p(pcontents).value

  #gul(pcontents) ?
  ccb()

  return data

def Paste(data):
  ocb(None) # Open Clip, Default task

  ecb()

  hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1)

  pchData = gl(hCd)

  strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii"))

  gul(hCd)

  scd(1, hCd)

  ccb()

5
적어도 파이썬 2.6 x64에서는로 변경 bytes(data,"ascii")해야했습니다 bytes(data). 질문에 답변 해 주셔서 감사합니다 .pywin32 또는 tk 또는 기타 여러 가지를 사용할 수 없으며 작동합니다.
Pat Corwin

1
걱정할 필요는 없지만 클립 보드에서 반환 된 데이터는 실제로 다른 인코딩으로되어 있으므로 Windows CP-1252라고 생각합니다. 이것은 다소 해킹되었지만 올바른 인코딩을 사용하지 않으면 ASCII가 아닌 문자가 오류를 발생 시키거나 잘못 디코딩합니다.
kapace

변수 이름에는 주석이 필요하지 않으며 모든 것이 유니 코드를 지원해야합니다.
Cees Timmerman

bytes(data, "mbcs")Windows 기본 인코딩으로 작동합니다. 이것을 클립 보드에로드 할 수있었습니다"másreas ç saod é í ó u* ü ö ï/" 하고 올바르게 읽을 수있었습니다.
mvbentes 2016 년

1
mbcs를 사용하면 다음과 같은 결과를 얻을 수 있습니다. OSError : 예외 : 0x0000000000000000 쓰기 액세스 위반
Seaky Lone

35

pyperclip- 크로스 플랫폼 클립 보드 모듈을 사용할 수 있습니다 . 또는 Xerox -win32 Python 모듈이 Windows에서 작동해야한다는 점을 제외하고 유사한 모듈입니다.


pyperclipWindows에서 유니 코드를 수행하지 않습니다. win32clipboard그렇습니다.
Cees Timmerman

13
pyperclip패치가 수락되었습니다. c:\python34\Scripts\pip install --upgrade pyperclip유니 코드 텍스트를 처리합니다.
Cees Timmerman

1
그것은이 있음을 알아 걸 렸어요 pyperclip하지 paperclip. 또한 2016 년과 같이 pyperclip은 유니 코드 문자와도 작동합니다. Python 3.5 및 pyperclip 1.5.27을 사용하여 Win10 64 비트에서 작동하도록 문자 ± ° ©© αβγθΔΨΦåäö를 테스트했습니다.
np8

29

클립 보드를 기본적으로 지원하는 우수한 팬더를 사용할 수 있지만 DataFrame을 통과해야합니다.

import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)

3
+1. 나는이 해결책을 좋아한다. 허용되는 Tkinter 솔루션보다 훨씬 간단합니다. 어쨌든 팬더를 가져온 경우 추가 오버 헤드가 없습니다. 또한 모든 플랫폼에서 작동합니다. 새 패키지를 설치할 필요도 없습니다 (대부분의 경우).
ChaimG

4
이것은 pyperclip어쨌든 사용 하므로 더 나은 사용pyperpclip
maxbellec

1
대부분의 사람들 (즉, 나) pandas에게는 쉽게 구할 수 있지만 import pyperclip작동하지 않습니다. 그래서 나는 "더 나은 pyperclip"에 동의하지 않습니다.
닥터 코어

1
팬더 만 사용하도록 제한되어 있다면 pyperclip을 직접 사용 import pandas.io.clipboard as pyperclip하거나 원하는 이름 을 지정할 수 있습니다 . 그것은 pandas적어도 그 안에있는 곳입니다
David Culbreth

1
이것은 복사 한 문자열에 줄 바꿈 문자를 추가하는 것으로 보입니다
Gijs van Oort

19

가장 간단한 방법은 pyperclip 입니다. 파이썬 2와 3에서 작동합니다.

이 라이브러리를 설치하려면 다음을 사용하십시오.

pip install pyperclip

사용법 예 :

import pyperclip

pyperclip.copy("your string")

클립 보드의 내용을 얻으려면 :

clipboard_content = pyperclip.paste()

3
그리고 pyperclip모듈은 파이썬과 함께 제공됩니까? 어떤 버전? 나는 파이썬 2.7에서 그것을 보지 못했다 ...
SamB

8
예, 5 줄 미만으로 문제를 쉽게 해결하는 답을 공감하십시오. 참조와 같은 세부 사항이 더 중요하지 않기 때문입니다. 내 친구의 스택 오버 플로우 사용. 어쨌든 nitpickers를 편집 할 것입니다. 당신을위한 팁 : 쓸모가 없거나 문제를 해결하지 못하는 답을 공감하십시오. 문제를 해결하거나 최소한 유용한 상향식 답변은 의견에 제안하여 하향 투표 대신 유용한 답변을 개선 할 수 있습니다.
maviz

3
참조하지 않으면 아무것도 해결되지 않습니다. 그러나 링크를 추가 했으므로 이제 답이 좋으므로 downvote를 제거합니다. 내 큰 문제는 표준 라이브러리 가져 오기처럼 보였습니다. 복사하지 않고 붙여 넣을 수있는 코드처럼 보였습니다.
Gloweye

pyperclip.paste()이미지가 작동하지 않으면 NoneType오류가 반환 됩니다. 그러나 마우스 오른쪽 버튼을 클릭하고 복사 한 다음 파이썬을 사용하여 복사 된 결과를 붙여 넣습니다.
JayRizzo

11

나는 다양한 솔루션을 시도했지만 이것이 내 테스트 를 통과하는 가장 간단한 방법입니다 .

#coding=utf-8

import win32clipboard  # http://sourceforge.net/projects/pywin32/

def copy(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
def paste():
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
    return data

if __name__ == "__main__":  
    text = "Testing\nthe “clip—board”: 📋"
    try: text = text.decode('utf8')  # Python 2 needs decode to make a Unicode string.
    except AttributeError: pass
    print("%r" % text.encode('utf8'))
    copy(text)
    data = paste()
    print("%r" % data.encode('utf8'))
    print("OK" if text == data else "FAIL")

    try: print(data)
    except UnicodeEncodeError as er:
        print(er)
        print(data.encode('utf8'))

Windows 8.1의 Python 3.4 및 Windows 7의 Python 2.7에서 OK로 테스트되었습니다. 또한 Windows에서 복사 한 Unix 줄 바꿈으로 유니 코드 데이터를 읽을 때도 마찬가지입니다. 복사 한 데이터는 Python이 종료 된 후 클립 보드에 유지됩니다."Testing the “clip—board”: 📋"

외부 의존성을 원하지 않으면이 코드를 사용하십시오 (현재 크로스 플랫폼의 일부) pyperclip - C:\Python34\Scripts\pip install --upgrade pyperclip)를 사용하십시오.

def copy(text):
    GMEM_DDESHARE = 0x2000
    CF_UNICODETEXT = 13
    d = ctypes.windll # cdll expects 4 more bytes in user32.OpenClipboard(None)
    try:  # Python 2
        if not isinstance(text, unicode):
            text = text.decode('mbcs')
    except NameError:
        if not isinstance(text, str):
            text = text.decode('mbcs')
    d.user32.OpenClipboard(0)
    d.user32.EmptyClipboard()
    hCd = d.kernel32.GlobalAlloc(GMEM_DDESHARE, len(text.encode('utf-16-le')) + 2)
    pchData = d.kernel32.GlobalLock(hCd)
    ctypes.cdll.msvcrt.wcscpy(ctypes.c_wchar_p(pchData), text)
    d.kernel32.GlobalUnlock(hCd)
    d.user32.SetClipboardData(CF_UNICODETEXT, hCd)
    d.user32.CloseClipboard()

def paste():
    CF_UNICODETEXT = 13
    d = ctypes.windll
    d.user32.OpenClipboard(0)
    handle = d.user32.GetClipboardData(CF_UNICODETEXT)
    text = ctypes.c_wchar_p(handle).value
    d.user32.CloseClipboard()
    return text

어디서 얻 win32clipboard습니까? 내 파이썬 2.7의 일부가 아닙니다. 그리고 왜 대신에 paste사용 합니까? CF_TEXTCF_UNICODETEXT
Mark Ransom

@ MarkRansom pywin32, test를 사용하기가 어려워 질 때까지 테스트가 제대로 작동했기 때문에. 코드를 업데이트했습니다.
Cees Timmerman

11

어떤 이유로 든 Tk 솔루션을 사용할 수 없었습니다. kapace의 솔루션 은 훨씬 더 작동 가능하지만 형식이 내 스타일과 상반되며 유니 코드에서는 작동하지 않습니다. 다음은 수정 된 버전입니다.

import ctypes

OpenClipboard = ctypes.windll.user32.OpenClipboard
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT = 13

GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GlobalSize = ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE = 0x0002
GMEM_ZEROINIT = 0x0040

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

paste = get
copy = put

확장 된 유니 코드 문자 및 Python 3에 더 잘 대처하기 위해이 답변이 처음 작성된 이후 위의 내용이 변경되었습니다 .Python 2.7 및 3.5 모두에서 테스트되었으며 같은 이모티콘으로도 작동합니다 \U0001f601 (😁).


@CeesTimmerman 이유를 테스트 할 Windows 8.1 시스템을 갖고 싶습니다. 오늘 나중에 조사 할 기회가있을 수 있습니다. 클립 보드에 텍스트가 있습니까?
Mark Ransom

예. 지난 3 일 동안 Python에서 클립 보드 코드를 광범위하게 테스트했습니다.
Cees Timmerman

put()기능에는 작업이 필요합니다. 그림 이모티콘 "📋"(\ U0001f400)은 "🐀"(\ U0001f4cb) 또는 "📋"로 복사됩니다. "📋"로 바뀝니다.
Cees Timmerman

@CeesTimmerman이 설명합니다. 내부 유니 코드 표현이 변경되어 3.3인지 3.4인지 기억할 수 없습니다. 이를 수정하려면 UTF-16으로 명시 적으로 인코딩해야합니다. 버그가 아닙니다.
Mark Ransom

1
@ YngvarKristiansen 나는 마침내 그 변화를 만들었습니다. 이 코드는 대부분의 최신 버전의 Python과 모든 가능한 유니 코드 문자에서 작동합니다.
Mark Ransom


5

모듈을 사용할 수 있습니다 clipboard. 간단하고 사용하기 쉽습니다. 함께 작동 , 윈도우 , 리눅스 .
참고 : 대안pyperclip

설치 한 후 가져 오십시오.

import clipboard

그런 다음 다음과 같이 복사 할 수 있습니다.

clipboard.copy("This is copied")

복사 한 텍스트를 붙여 넣을 수도 있습니다.

clipboard.paste()

2
이것은 최고의 솔루션처럼 보입니다. 로 클립 보드를 설치할 수 있습니다 pip install clipboard.
vy32

5

Pandas에 따라 괜찮다면 내가 찾은 가장 쉽고 안정적인 방법입니다. 그러나 이것이 공식적으로 Pandas API의 일부라고 생각하지 않으므로 향후 업데이트로 인해 중단 될 수 있습니다. 0.25.3부터 작동합니다

from pandas.io.clipboard import copy 
copy("test")

3

위젯에는 이름이 지정된 메소드도 있습니다 .clipboard_get() 에는 클립 보드의 내용을 반환하는 (클립 보드의 데이터 유형에 따라 오류가 발생하지 않는 한).

clipboard_get()방법이 버그 보고서에 언급 :
http://bugs.python.org/issue14777

이상하게도,이 방법은 내가 일반적으로 참조하는 일반적인 (비공식적 인) 온라인 TkInter 문서 소스에서 언급되지 않았습니다.


3

나는 이것에 훨씬 간단한 해결책이 있다고 생각합니다.

name = input('What is your name? ')
print('Hello %s' % (name) )

그런 다음 명령 행에서 프로그램을 실행하십시오.

파이썬 greeter.py | 클립

파일의 출력을 클립 보드로 파이프합니다


좋은 해결책이지만 많은 파이썬이 IDE에서 개발되고 실행
Jesse Reza Khorasanee

2

ctypes를 사용한 Mark Ransom의 대답 외에도 핸들이 int 크기로 잘린 것처럼 보이므로 (모든?) x64 시스템에서는 작동하지 않습니다. 인수와 반환 값을 명시 적으로 정의하면이 문제를 극복하는 데 도움이됩니다.

import ctypes
import ctypes.wintypes as w

CF_UNICODETEXT = 13

u32 = ctypes.WinDLL('user32')
k32 = ctypes.WinDLL('kernel32')

OpenClipboard = u32.OpenClipboard
OpenClipboard.argtypes = w.HWND,
OpenClipboard.restype = w.BOOL

GetClipboardData = u32.GetClipboardData
GetClipboardData.argtypes = w.UINT,
GetClipboardData.restype = w.HANDLE

EmptyClipboard = u32.EmptyClipboard
EmptyClipboard.restype = w.BOOL

SetClipboardData = u32.SetClipboardData
SetClipboardData.argtypes = w.UINT, w.HANDLE,
SetClipboardData.restype = w.HANDLE

CloseClipboard = u32.CloseClipboard
CloseClipboard.argtypes = None
CloseClipboard.restype = w.BOOL

GHND = 0x0042

GlobalAlloc = k32.GlobalAlloc
GlobalAlloc.argtypes = w.UINT, w.ctypes.c_size_t,
GlobalAlloc.restype = w.HGLOBAL

GlobalLock = k32.GlobalLock
GlobalLock.argtypes = w.HGLOBAL,
GlobalLock.restype = w.LPVOID

GlobalUnlock = k32.GlobalUnlock
GlobalUnlock.argtypes = w.HGLOBAL,
GlobalUnlock.restype = w.BOOL

GlobalSize = k32.GlobalSize
GlobalSize.argtypes = w.HGLOBAL,
GlobalSize.restype = w.ctypes.c_size_t

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GHND, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

#Test run
paste = get
copy = put
copy("Hello World!")
print(paste())

0
import wx

def ctc(text):

    if not wx.TheClipboard.IsOpened():
        wx.TheClipboard.Open()
        data = wx.TextDataObject()
        data.SetText(text)
        wx.TheClipboard.SetData(data)
    wx.TheClipboard.Close()

ctc(text)

2
문제와 해결책에 대한 설명이 도움이 될 것입니다.
showdev

텍스트를 클립 보드에 복사하는 기능 wx python library (TK를 배운 적이 없음)를 사용하여 여기에 묻는 질문에 대한 다른 솔루션을 사용하십시오.
jlk

문제 / 솔루션 @jlk에 대한 설명을 포함하도록 답변을 자유롭게 편집하십시오. 이렇게하면 일반적으로 답변이 더 유용합니다. 또한 노력해 주셔서 감사하지만 원래 포스터에 Tk를 구체적으로 요구해야 할 이유가 있다고 생각합니다.
icedwater

0

여기서 공유하는 스 니펫은 텍스트 파일을 포맷하는 기능을 활용합니다. 복잡한 출력을 클립 보드에 복사하려면 어떻게해야합니까? (열에있는 numpy 배열 또는 무언가의 목록을 말하십시오)

import subprocess
import os

def cp2clip(clist):

    #create a temporary file
    fi=open("thisTextfileShouldNotExist.txt","w")

    #write in the text file the way you want your data to be
    for m in clist:
        fi.write(m+"\n")

    #close the file
    fi.close()

    #send "clip < file" to the shell
    cmd="clip < thisTextfileShouldNotExist.txt"
    w = subprocess.check_call(cmd,shell=True)

    #delete the temporary text file
    os.remove("thisTextfileShouldNotExist.txt")

    return w

Windows에서만 작동하며 Linux 또는 Mac에 맞게 조정할 수 있습니다. 어쩌면 조금 복잡한 ...

예:

>>>cp2clip(["ET","phone","home"])
>>>0

모든 텍스트 편집기에서 Ctrl + V :

ET
phone
home

0

이것은 분무기 의 향상된 답변입니다 .

참고 2 호출 update()200 ms지연. 클립 보드의 불안정한 상태로 인해 정지 된 응용 프로그램을 보호합니다.

from Tkinter import Tk
import time     

r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')

r.update()
time.sleep(.2)
r.update()

r.destroy()

0

파이썬의 클립 보드 라이브러리를 사용하십시오!

import clipboard as cp
cp.copy("abc")

클립 보드에 'abc'가 포함되었습니다. 행복한 붙여 넣기!


0

모든 답변이 다양한 파이썬 구성에서 작동하지는 않았 으므로이 솔루션은 하위 프로세스 모듈 만 사용합니다. 그러나 Mac 또는 Windows 용 copy_keyword이어야 pbcopy합니다 clip.

import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')

다음은 현재 운영 체제가 무엇인지 자동으로 확인하는보다 광범위한 코드입니다.

import platform
import subprocess

copy_string = 'New Clipboard Value 😀'

# Check which operating system is running to get the correct copying keyword.
if platform.system() == 'Darwin':
    copy_keyword = 'pbcopy'
elif platform.system() == 'Windows':
    copy_keyword = 'clip'

subprocess.run(copy_keyword, universal_newlines=True, input=copy_string)

해당 문자열을 붙여 넣으려고하면 IDLE이 충돌합니다.
Max는

@MaxDoesStuff 이모티콘없이 사용해보십시오. 왜 이것이 기본 IDLE에서 작동하지 않는지 모르겠지만 다른 IDLE에서는 작동합니다.
Fetchinator

0

winclip32 모듈을 사용할 수 있습니다! 설치:

pip install winclip32

복사 :

import winclip32
winclip32.set_clipboard_data(winclip32.UNICODE_STD_TEXT, "some text")

얻을 :

import winclip32
print(winclip32.get_clipboard_data(winclip32.UNICODE_STD_TEXT))

자세한 내용은 https://pypi.org/project/winclip32/


-1

클립 보드를 복사하는 코드 스 니펫 :

이름이 ( clipboard.py ) 모듈에 랩퍼 Python 코드를 작성하십시오 .

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
def setText(text):
    Clipboard.SetText(text)

def getText():
    return Clipboard.GetText()

그런 다음 위 모듈을 코드로 가져옵니다.

import io
import clipboard
code = clipboard.getText()
print code
code = "abcd"
clipboard.setText(code)

IronPython 의 블로그 게시물 클립 보드 액세스에 크레딧을 제공해야합니다 .


-2

당신은 이것을 시도 할 수 있습니다 :

command = 'echo content |clip'
subprocess.check_call(command, shell=True)

-9
from Tkinter import Tk
clip = Tk()

어쩌면 당신은 당신이 얻는 오류 메시지와 사용중인 파이썬 버전을 말해 줄 수 있습니다. 2 줄은 파이썬 2와 함께 작품을 썼습니다. 감사합니다
tagoma

2
문제는 "파이썬을 사용하여 Windows에서 클립 보드에 문자열을 복사하는 방법"입니다. 확실히 이것은 충돌 하지는 않지만 실제로는 전혀 아무것도
Antti Haapala

2
Q : Python을 사용하여 문자열을 Windows 클립 보드에 복사하려면 어떻게해야합니까? A : GUI 라이브러리를 가져 와서 루트 객체를 만듭니다. . 죄송합니다.이 질문에 어떻게 대답합니까?
Martijn Pieters

python3을 사용하면 다음 행을 따라 무언가를 수행 할 수 있습니다 : import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # 현재 클립 보드 지우기> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19] : 'Hello World'>
tagoma

2
그런 다음 대답하십시오. 그것이 의미하는 것처럼 실제로 여기에 도움이되는 것은 없습니다. Windows에서 테스트 했습니까?
Martijn Pieters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.