Bir dizeyi Python kullanarak Windows'ta panoya nasıl kopyalarım?


193

Kullanıcı girişi dışında bir dize oluşturur ve daha sonra panoya ekler temel bir Windows uygulaması yapmaya çalışıyorum. Python kullanarak bir dizeyi panoya nasıl kopyalarım?


4
İlgili bu soruya .
glglgl

jaraco.clipboard yok (çok): clipboard.copy (değişken)
JinSnow

Ayrıca , bir pencere göstermeden Tkinter kullanarak panoya kopyalama ile ilgili bir soruya cevabımı da görün . Tkinter kullanarak pano metnini değiştiren / döndüren bir Python işlevi içerir.
Edward

Yanıtlar:


286

Aslında, pywin32ve ctypesbu basit görev için aşırıya kaçmış gibi görünüyor. Tkintervarsayılan olarak Python ile birlikte gelen ve diğer harika şeylerle birlikte pano erişim yöntemlerine sahip bir platformlar arası GUI çerçevesidir.

İhtiyacınız olan tek şey sistem panosuna bir metin koymaksa, bunu yapar:

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

Ve hepsi bu, platforma özgü üçüncü taraf kütüphanelerle uğraşmanıza gerek yok.

Python 3 kullanıyorsanız, yerine TKinterile tkinter.


55
Pano içeriğini edinin: sonuç = r.selection_get (selection = "CLIPBOARD")
MJ

34
@SurDin Tkinter, python 3'te tkinter olarak yeniden adlandırıldı, bu nedenle kullandığınız sürüme bağlıdır.
Dürüst Abe

24
tüm uygulamalarım panonun içeriğini bu işlevle yapıştırdıktan sonra yanıt vermiyor, garip bir şekilde, sonuç iyi çalışıyor.
Bartlomiej Lewandowski

14
Aramazsam çalışır r.destroy(). Bunu aradığımda, pano boşalır ve Ctrl-V tuşlarına basmak hedef uygulamanın donmasına neden olabilir. (İşletim Sistemi: Windows 7 x64)
netvope

8
Benim için bu python 3.4 için işe yaramaz, ancak python 2.7 için çalışır (evet, Tkinter yerine tkinter ile)
Matty

79

Bir çözümüm yoktu, sadece bir çözüm var.

Windows Vista ve sonraki sürümlerde, komutun clipçıktısını komut satırından alan ve panoya yerleştiren yerleşik bir komut bulunur. Örneğin ipconfig | clip,.

Bu yüzden osbir dize alıp dahili Windows çözümünü kullanarak panoya ekleyen modül ile bir işlev yaptım .

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.

Ancak daha önce yorumlarda belirtildiği gibi, bu yaklaşımın bir dezavantajı, echokomutun metninizin sonuna otomatik olarak yeni bir satır eklemesidir. Bundan kaçınmak için komutun değiştirilmiş bir sürümünü kullanabilirsiniz:

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

Windows XP kullanıyorsanız , Windows XP Pro'nun komut isteminden doğrudan Pano'ya kopyala ve yapıştır bölümündeki adımları izleyerek çalışır .


20
textiçeriyorsa ne olur | calc.exe ?
Willi Ballenthin

2
@WilliBallenthin sonra çift tırnak içine sarmanız gerekir. Peki ya çift tırnak içeriyorsa? Sonra çift tırnak çift gerekir. text with " quotes and | pipeolur "text with "" quotes and | pipe" bu 95. daha eski pencereli sistemlerde sorunlar olabilir rağmen
ColBeseder

5
Son derece güvensiz fonksiyon ... Panonuza gönderilen içerik artık bir giriş vektörüdür ve böylece saldırı yüzeyinizi arttırır.
Phil L.

2
Ayrıca yeni satırlar için desteğe ihtiyacım var, bu yüzden bunu kullanmak için değiştirdim type. Metnimi dosyaya yazıyorum ve komutu kullanıyorum type myfile.txt | clip.
Mixopteryx

1
Bu benim için en iyi cevap olmasına rağmen, bir sorunu var (Python 3.5, Windows 10); dizenin sonuna her zaman istenmeyen bir yeni satır eklenir. Nasıl önlenir?
mmj

42

Windows API'sine girmek ve büyük pywin32 paketinden kaçınmak için ctypes'i de kullanabilirsiniz. Kullandığım şey bu (fakir stili affedin, ancak fikir orada):

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
Piton 2.6 x64 En azından ben değiştirmek zorunda bytes(data,"ascii")için bytes(data). Soruyu cevapladığınız için teşekkürler, pywin32 veya tk veya başka şeyler kullanamıyorum ve bu işe yarıyor.
Pat Corwin

1
Endişeye gerek yok, ancak panodan döndürülen verilerin aslında başka bir kodlamada olduğunu, Windows CP-1252 olduğuna inanıyorum. Bu biraz birlikte saldırıya uğradı, ancak doğru kodlamayı kullanmazsanız, ascii olmayan karakterler bir hata oluşturur veya yanlış kod çözür.
kapace

Değişken adları yorum gerektirmemeli ve her şey Unicode'u desteklemelidir.
Cees Timmerman

bytes(data, "mbcs")Windows varsayılan kodlaması ile çalışır. "másreas ç saod é í ó u* ü ö ï/"Bunu panoya yüklememe ve doğru şekilde okumama izin verdi.
mvbentes

1
mbcs kullanarak bana bunu verir: OSError: istisna: erişim ihlali yazma 0x0000000000000000
Seaky Lone

35

Sen kullanabilirsiniz pyperclip çapraz platform pano modülü -. Veya Xerox benzeri modül, win32 Python modülünün Windows üzerinde çalışmasını gerektirir.


pyperclipWindows'ta Unicode yapmaz. win32clipboardyapar.
Cees Timmerman

13
Benim pyperclipyama kabul edildi; c:\python34\Scripts\pip install --upgrade pyperclipUnicode metni işlemek için.
Cees Timmerman

1
Bunun olduğunu öğrenmek biraz zaman aldı pyperclip, değil paperclip. Ayrıca, 2016'da olduğu gibi, pyperclip de Unicode karakterleriyle çalışır. Python 3.5 ve pyperclip 1.5.27 ile Win10 64-bit üzerinde çalışmak için ± α ©■ α charactersåäö karakterlerini test ettim.
np8

29

Yerleşik pano desteğine sahip mükemmel pandaları kullanabilirsiniz, ancak bir DataFrame'den geçmeniz gerekir.

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

3
+1. Bu çözümü seviyorum. Kabul edilen Tkinter çözümünden bile daha basit. Yine de pandaları içe aktardıysanız, ek yük yoktur. Ayrıca tüm platformlarda çalışır. (Çoğu durumda) yeni bir paket kurmayı bile gerektirmez.
ChaimG

4
bu pyperclipzaten kullanıyor , bu yüzden daha iyi kullanımpyperpclip
maxbellec

1
Çoğu insan için (yani ben), pandaskolayca elde edilebilir, ancak import pyperclipçalışmaz. Bu yüzden "daha iyi kullanım pyperclip" ile aynı fikirde değilim.
Doktor Çekirdek

1
Yalnızca panda kullanmakla sınırlıysanız, pyperclip'i doğrudan kullanabilir import pandas.io.clipboard as pyperclipveya istediğiniz her şeyi adlandırabilirsiniz. O içinde oturur İşte bu noktada pandas, en azından
David Culbreth


19

En basit yol pyperclip'tir . Python 2 ve 3'te çalışır.

Bu kütüphaneyi kurmak için şunu kullanın:

pip install pyperclip

Örnek kullanım:

import pyperclip

pyperclip.copy("your string")

Pano içeriğini almak istiyorsanız:

clipboard_content = pyperclip.paste()

3
Ve gelmez pyperclipmodülü Python ile gelen? Hangi sürümler? Python 2.7'de görmüyorum ...
SamB

8
Evet, problemi 5 satırdan daha az bir sürede kolayca çözen bir cevabı indir. çünkü referanslama gibi küçük detaylar daha önemlidir; stackoverflow büyük kullanımı arkadaşım. Nitpickers için yine de düzenleyeceğim. Sizin için ipucu: işe yaramayan veya sorunu çözmeyen cevapları azaltın; Sorunu çözen veya en azından yararlı olan cevapları oylayın ve yorumlarda yararlı bir cevabı geliştirmek için yorumlarda bir öneri yapın.
maviz

3
Referans olmadan hiçbir şeyi çözemezsiniz. Ama bağlantıyı eklediğiniz için, cevap şimdi iyi olduğu için aşağı oyu kaldıracağım. En büyük sorunum, standart bir kütüphane içe aktarma gibi görünüyordu; değilken kopyalayabileceğiniz / yapıştırabileceğiniz kod gibi görünüyordu.
Gloweye

pyperclip.paste()görüntülerle çalışmıyor sadece NoneTypehata döndürür . ancak sağ tıklayıp kopyaladıktan sonra kopyalanan sonuçları yapıştırmak için python kullanarak çalışır.
JayRizzo

11

Ben çeşitli çözümler denedim, ama bu geçer basit olanıdır my testi :

#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'de Python 3.4 ve Windows 7'de Python 2.7'de Tamam test edildi. Ayrıca Windows'dan kopyalanan Unix satır beslemeleriyle Unicode verileri okurken. Kopyalanan veriler Python'dan çıktıktan sonra panoda kalır:"Testing the “clip—board”: 📋"

Harici bağımlılık istemiyorsanız, bu kodu kullanın (şimdi çapraz platformun bir parçası 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

Nereye gidiyorsun win32clipboard? Python 2.7'imin bir parçası değil. Ve bunun yerine neden pastekullanılır ? CF_TEXTCF_UNICODETEXT
Mark Ransom

@MarkRansom pywin32 ve test kullanarak zorlaşana kadar testim iyi çalıştığı için. Kodu güncelledim.
Cees Timmerman

11

Nedense Tk çözümünün benim için çalışmasını hiç sağlayamadım. kapace'nin çözümü çok daha uygulanabilir, ancak biçimlendirme stilime aykırı ve Unicode ile çalışmıyor. İşte değiştirilmiş bir sürüm.

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

Bu yanıt ilk oluşturulduğundan beri, genişletilmiş Unicode karakterleri ve Python 3 ile daha iyi başa çıkmak için yukarıdakiler değişti. Hem Python 2.7 hem de 3.5'te test edildi ve hatta emoji ile bile çalışıyor \U0001f601 (😁).


@CeesTimmerman Nedenini test etmek için bir Windows 8.1 sistemine sahip olmak isterim. Bugün daha sonra inceleme şansım olabilir. Panoda metin olduğundan emin misin?
Mark Ransom

Evet. Son üç gündür Python'daki pano kodunu kapsamlı bir şekilde test ettim.
Cees Timmerman

put()Fonksiyon aynı zamanda çalışmak gerekir; emoji "📋" (\ U0001f400) "🐀" (\ U0001f4cb) veya "📋" olarak kopyalanır. "📋" ya döner.
Cees Timmerman

@CeesTimmerman bunu açıklıyor. İç Unicode temsili değişti, 3.3 ya da 3.4 olup olmadığını hatırlayamıyorum. Düzeltmek için UTF-16'ya açık bir kodlama gerekir. Bu bir hata değil.
Mark Ransom

1
@YngvarKristiansen Sonunda bu değişiklikleri yapmaya başladım. Şimdi bu kod Python ve olası her Unicode karakteri en modern sürümleri için çalışıyor eminim.
Mark Ransom


6

İşte Pandalara bağlı olarak iyi olup olmadığınızı bulduğum en kolay ve güvenilir yol. Ancak bunun resmi olarak Pandalar API'sının bir parçası olduğunu sanmıyorum, bu yüzden gelecekteki güncellemelerle kırılabilir. 0.25.3 itibariyle çalışır

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

5

Modülü kullanabilirsiniz clipboard. Basit ve kullanımı son derece kolaydır. İle çalışır Mac , Windows'un , & Linux .
Not: bu bir alternatifpyperclip

Yükledikten sonra içe aktarın:

import clipboard

Sonra şu şekilde kopyalayabilirsiniz:

clipboard.copy("This is copied")

Kopyalanan metni de yapıştırabilirsiniz:

clipboard.paste()

2
Bu en iyi çözüm gibi görünüyor. pano ile kurulabilir pip install clipboard.
vy32

3

Widget'lar ayrıca .clipboard_get()panonun içeriğini döndüren adlı bir yönteme sahiptir (panodaki veri türüne bağlı olarak bir tür hata oluşmadıkça).

clipboard_get()Yöntem bu hata raporunda söz edilir:
http://bugs.python.org/issue14777

Garip bir şekilde, bu yöntem genellikle bahsettiğim yaygın (ancak resmi olmayan) çevrimiçi TkInter dokümantasyon kaynaklarında bahsedilmedi.


3

Bunun çok daha basit bir çözümü olduğunu düşünüyorum.

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

Ardından programınızı komut satırında çalıştırın

python greeter.py | klips

Bu, dosyanızın çıktısını panoya aktarır


Bu iyi bir çözüm ama bir çok pitonun bir IDE'de geliştirildiğini ve çalıştırıldığını hayal ediyorum
Jesse Reza Khorasanee

2

Mark Ransom'un ctypes kullanarak verdiği cevaba ek olarak : Bu, (hepsi?) X64 sistemleri için işe yaramaz, çünkü tutamaçlar int boyutuna kesilmiş gibi görünür. Arg ve dönüş değerlerini açıkça tanımlamak bu sorunun üstesinden gelmeye yardımcı olur.

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
Sorunun ve çözümün açıklaması yardımcı olacaktır.
showdev

metni panoya kopyalama işlevi. wx python kitaplığını kullanarak (TK'yi hiç öğrenmedim) burada sorulan soruya başka bir çözüm.
jlk

Sorunu, problem / solution @jlk açıklamanızı içerecek şekilde düzenlemekten çekinmeyin - bunu yapmak genellikle yanıtları daha kullanışlı hale getirir. Ayrıca, denediğiniz için teşekkürler, ancak orijinal posterin özellikle Tk'yi istemek için bir nedeni olduğunu düşünüyorum.
icedwater

0

Burada paylaştığım snippet, metin dosyalarını biçimlendirme özelliğinden yararlanıyor: karmaşık bir çıktıyı panoya kopyalamak isterseniz ne olacak? (Sütunda numpy dizi veya bir şey listesi söyle)

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

sadece windows için çalışıyor, sanırım linux veya mac için uyarlanabilir. Belki biraz karmaşık ...

misal:

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

Herhangi bir metin düzenleyicisinde Ctrl + V:

ET
phone
home

0

Bu atomizerin geliştirilmiş cevabıdır .

Not 2 aramaları update()ve 200 msaralarında gecikme. Panonun kararsız durumu nedeniyle donma uygulamalarını korurlar:

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

Python'un pano kitaplığını kullanın!

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

Pano şimdi 'abc' içeriyor. Mutlu yapıştırma!


0

Tüm cevaplar çeşitli python yapılandırmalarım için işe yaramadı, bu nedenle bu çözüm yalnızca alt işlem modülünü kullanıyor. Ancak, Mac veya Windows için copy_keywordolması gerekir :pbcopyclip

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

Mevcut işletim sisteminin ne olduğunu otomatik olarak kontrol eden bazı daha kapsamlı kodlar şunlardır:

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)

Bu dizeyi yapıştırmaya çalıştığınızda IDLE kilitleniyor.
Max,

@MaxDoesStuff Emoji olmadan deneyin. Bunun neden varsayılan IDLE'de çalışmadığını bilmiyorum, ancak diğer IDLE'lerde çalışıyor.
Fetchinator7

0

Winclip32 modülünü kullanabilirsiniz! Yüklemek:

pip install winclip32

kopyalamak:

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

almak:

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

daha fazla bilgi için: https://pypi.org/project/winclip32/


-1

Panoyu kopyalamak için kod snippet'i:

( Clipboard.py ) adlı bir modülde sarıcı Python kodu oluşturun :

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

def getText():
    return Clipboard.GetText()

Ardından yukarıdaki modülü kodunuza aktarın.

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

IronPython'da Clipboard Access blog yazısına kredi vermeliyim .


-2

bunu deneyebilirsiniz:

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

-9
from Tkinter import Tk
clip = Tk()

belki aldığınız hata mesajını ve kullandığınız python sürümünü söyleyerek yapıcı olabilirsiniz. yazdığım 2 satır python 2 ile çalışıyor. teşekkür ederim
tagoma

2
Soru "Python kullanarak Windows'da panoya nasıl bir dize kopyalayabilirim" dir. Kuşkusuz bu değil çökmesine ama oldukça Ve olduğu o söz konusu tatmin etmiyor hiç bir şey
Antti Haapala

2
S: Python kullanarak bir dizeyi Windows panosuna nasıl kopyalarım? C: Bir GUI kitaplığını içe aktarın ve kök nesneyi oluşturun. . Üzgünüz, bu belirtilen soruya nasıl cevap veriyor?
Martijn Pieters

python3 ile şu satırlar boyunca bir şeyler yapabilirsiniz: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # geçerli panoyu temizle> mystring = 'Merhaba Dünya'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19]: 'Merhaba Dünya'>
tagoma

2
Sonra cevabı ver. Durduğu gibi burada aslında yararlı bir şey yok. Bunu Windows'ta test ettiniz mi?
Martijn Pieters
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.