Jak skopiować ciąg znaków do schowka w systemie Windows za pomocą języka Python?
193
Próbuję utworzyć podstawową aplikację systemu Windows, która buduje ciąg znaków na podstawie danych wprowadzonych przez użytkownika, a następnie dodaje go do schowka. Jak skopiować ciąg do schowka za pomocą Pythona?
jaraco.clipboard robi to (też): clipboard.copy (zmienny)
JinSnow
Zobacz także moją odpowiedź na powiązane pytanie dotyczące kopiowania do schowka za pomocą Tkintera bez wyświetlania okna. Zawiera funkcję Pythona, która zastępuje / zwraca tekst ze schowka za pomocą Tkintera.
Edward
Odpowiedzi:
286
Właściwie, pywin32i ctypeswydaje się być przesadą dla tego prostego zadania. Tkinterto wieloplatformowy framework GUI, który jest domyślnie dostarczany z Pythonem i ma metody dostępu do schowka wraz z innymi fajnymi rzeczami.
Jeśli wystarczy wstawić tekst do schowka systemowego, zrobi to:
fromTkinterimportTk
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()
I to wszystko, nie trzeba się bawić z bibliotekami stron trzecich specyficznymi dla platformy.
Jeśli używasz Python 3, wymienić TKintersię tkinter.
Pobierz zawartość schowka: wynik = r.selection_get (selection = "SCHOWEK")
MJ
34
@SurDin Tkinter został przemianowany na tkinter w Pythonie 3, więc zależy to od używanej wersji.
Uczciwy Abe
24
wszystkie moje aplikacje przestają reagować po wklejeniu zawartości schowka za pomocą tej funkcji, co dziwne, uzyskanie efektu działa dobrze.
Bartłomiej Lewandowski,
14
Działa, jeśli nie dzwonię r.destroy(). Po wywołaniu tego schowek staje się pusty, a naciśnięcie Ctrl-V może spowodować zawieszenie się aplikacji docelowej. (System operacyjny: Windows 7 x64)
netvope
8
Dla mnie to nie działa dla Pythona 3.4, ale działa dla Pythona 2.7 (tak, z Tkinter zamiast Tkinter)
Matty
79
Nie miałem rozwiązania, tylko obejście.
Windows Vista i nowsze mają wbudowane polecenie o nazwie, clipktóre pobiera dane wyjściowe polecenia z wiersza poleceń i umieszcza je w schowku. Na przykład,ipconfig | clip .
Zrobiłem więc funkcję z osmodułem, który pobiera ciąg znaków i dodaje go do schowka za pomocą wbudowanego rozwiązania 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.
Jednak, jak zauważono wcześniej w komentarzach, jednym minusem tego podejścia jest to, że echopolecenie automatycznie dodaje nowy wiersz na końcu tekstu. Aby tego uniknąć, możesz użyć zmodyfikowanej wersji polecenia:
@WilliBallenthin, a następnie musisz zawinąć w podwójne cudzysłowy. Ale co jeśli zawiera podwójne cudzysłowy? Następnie musisz podwoić podwójne cudzysłowy. text with " quotes and | pipestaje się "text with "" quotes and | pipe" Chociaż może to mieć problemy w systemach z Windows starszymi niż 95.
ColBeseder
5
Niezwykle niepewna funkcja ... Treść wysyłana do schowka jest teraz wektorem wejściowym, a tym samym zwiększa powierzchnię ataku.
Phil L.
2
Potrzebuję także wsparcia dla nowych linii, więc zmodyfikowałem to, aby użyć type. Piszę tekst do pliku i używam polecenia type myfile.txt | clip.
Mixopteryx
1
Chociaż jest to dla mnie najlepsza odpowiedź, ma problem (Python 3.5, Windows 10); niechciana nowa linia jest zawsze dodawana na końcu łańcucha. Jak tego uniknąć?
mmj
42
Możesz także użyć ctypes, aby skorzystać z Windows API i uniknąć ogromnego pakietu pywin32. Oto, czego używam (przepraszam za kiepski styl, ale pomysł już istnieje):
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 =0x2000defGet():
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
defPaste(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()
Przynajmniej w Pythonie 2.6 x64 musiałem zmienić bytes(data,"ascii")na bytes(data). Dzięki za odpowiedź na pytanie, nie mogę użyć pywin32 lub tk lub kilku innych rzeczy i to działa.
Pat Corwin,
1
Nie martw się, ale pamiętaj, że dane zwrócone ze schowka są w rzeczywistości w innym kodowaniu, myślę, że to Windows CP-1252. Zostało to nieco zhakowane razem, ale jeśli nie użyjesz prawidłowego kodowania, znaki inne niż ascii zgłoszą błąd lub nieprawidłowo zdekodują.
kapace
Nazwy zmiennych nie powinny wymagać komentarzy, a wszystko powinno obsługiwać Unicode.
Cees Timmerman,
bytes(data, "mbcs")będzie działać z domyślnym kodowaniem systemu Windows. Pozwolił mi załadować to do schowka "másreas ç saod é í ó u* ü ö ï/"i poprawnie odczytać.
mvbentes
1
za pomocą mbcs daje mi to: OSError: wyjątek: naruszenie zasad dostępu pisanie 0x0000000000000000
Seaky Lone
35
Możesz użyć pyperclip - międzyplatformowego modułu schowka. Lub Xerox - podobny moduł, z tym wyjątkiem, że wymaga modułu Python win32 do pracy w systemie Windows.
+1. Podoba mi się to rozwiązanie. Jest to nawet prostsze niż zaakceptowane rozwiązanie Tkinter. Jeśli mimo to zaimportowałeś pandy, nie ma dodatkowych kosztów ogólnych. Działa również na wszystkich platformach. Nie wymaga nawet (w większości przypadków) instalacji nowego pakietu.
ChaimG
4
to i pypercliptak używa , więc lepiej użyjpyperpclip
maxbellec
1
Dla większości ludzi (tj. Dla mnie) pandasjest łatwo dostępny, ale import pyperclipnie działa. Nie zgadzam się więc z „lepszym użyciem pyperclipa”.
Doktor Core
1
Jeśli jesteś ograniczony do używania tylko pand, możesz użyć pyperclipa bezpośrednio import pandas.io.clipboard as pypercliplub nazwać go, jak chcesz. Tam pandasprzynajmniej się znajduje
David Culbreth,
1
Wydaje się, że dodaje to znak nowego wiersza do kopiowanego ciągu
Gijs van Oort
19
Najprostszym sposobem jest użycie klipsa . Działa w Pythonie 2 i 3.
A czy pyperclipmoduł jest dostarczany z Pythonem? Które wersje? Nie widzę tego w Pythonie 2.7 ...
SamB
8
Tak, zanotuj odpowiedź, która z łatwością rozwiąże problem w mniej niż 5 liniach; ponieważ drobne szczegóły, takie jak odniesienia, są ważniejsze; świetne wykorzystanie stackoverflow, mój przyjacielu. Zresztą i tak dokonam edycji nitpickerów. Wskazówka dla Ciebie: głosuj na odpowiedzi, które są bezużyteczne lub nie rozwiązują problemu; głosuj odpowiedzi, które rozwiązują problem lub przynajmniej są przydatne i sugeruj w komentarzach, aby poprawić użyteczną odpowiedź zamiast głosowania negatywnego.
maviz
3
Bez odniesienia nic nie rozwiązujesz. Ale ponieważ dodałeś link, usunę głos negatywny, ponieważ odpowiedź jest teraz dobra. Moim większym problemem było to, że wyglądał jak standardowy import biblioteki; wyglądał jak kod, który można skopiować / wkleić, gdy nie jest.
Gloweye,
pyperclip.paste()nie działa z obrazami, po prostu zwraca NoneTypebłąd. ale działa z kliknięciem prawym przyciskiem myszy i skopiowaniem, a następnie za pomocą Pythona wkleić skopiowane wyniki.
JayRizzo
11
Próbowałem różnych rozwiązań, ale jest to najprostsze, które przechodzi mój test :
#coding=utf-8import 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.exceptAttributeError:passprint("%r"% text.encode('utf8'))
copy(text)
data = paste()print("%r"% data.encode('utf8'))print("OK"if text == data else"FAIL")try:print(data)exceptUnicodeEncodeErroras er:print(er)print(data.encode('utf8'))
Testowano OK w Pythonie 3.4 w systemie Windows 8.1 i Pythonie 2.7 w systemie Windows 7. Również podczas odczytywania danych Unicode z uniksowymi liniami skopiowanymi z systemu Windows. Skopiowane dane pozostają w schowku po zamknięciu Pythona:"Testing
the “clip—board”: 📋"
Jeśli nie chcesz żadnych zewnętrznych zależności, użyj tego kodu (teraz stanowi część platformy 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 2ifnot isinstance(text, unicode):
text = text.decode('mbcs')exceptNameError:ifnot 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
Gdzie można dostać win32clipboard? To nie jest część mojego Pythona 2.7. I dlaczego pasteużywa CF_TEXTzamiast CF_UNICODETEXT?
Mark Ransom,
@MarkRansom pywin32, a ponieważ mój test działał dobrze, dopóki nie utrudniłem używania 📋. Zaktualizowałem kod.
Cees Timmerman,
11
Z jakiegoś powodu nigdy nie udało mi się uzyskać rozwiązania Tk dla mnie. Rozwiązanie kapace jest o wiele bardziej praktyczne, ale formatowanie jest sprzeczne z moim stylem i nie działa z Unicode. Oto zmodyfikowana wersja.
import ctypes
OpenClipboard= ctypes.windll.user32.OpenClipboardEmptyClipboard= ctypes.windll.user32.EmptyClipboardGetClipboardData= ctypes.windll.user32.GetClipboardDataSetClipboardData= ctypes.windll.user32.SetClipboardDataCloseClipboard= ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT =13GlobalAlloc= ctypes.windll.kernel32.GlobalAllocGlobalLock= ctypes.windll.kernel32.GlobalLockGlobalUnlock= ctypes.windll.kernel32.GlobalUnlockGlobalSize= ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE =0x0002
GMEM_ZEROINIT =0x0040
unicode_type = type(u'')def get():
text =NoneOpenClipboard(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):ifnot 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
Powyższe zmieniło się od czasu utworzenia tej odpowiedzi, aby lepiej radzić sobie z rozszerzonymi znakami Unicode i Pythonem 3. Został przetestowany zarówno w Pythonie 2.7, jak i 3.5, i działa nawet z emoji takimi jak \U0001f601 (😁).
@CeesTimmerman Chciałbym mieć system Windows 8.1, aby sprawdzić, dlaczego. Mogę mieć dzisiaj okazję to zbadać. Czy na pewno masz tekst w schowku?
Mark Ransom,
Tak. W ciągu ostatnich trzech dni intensywnie testowałem kod schowka w Pythonie.
Cees Timmerman,
put()Funkcja wymaga również pracy; emoji „📋” (\ U0001f400) jest kopiowane jako „🐀” (\ U0001f4cb) lub „📋.” zmienia się w „📋”.
Cees Timmerman,
@CeesTimmerman, który to wyjaśnia. Zmieniono wewnętrzną reprezentację Unicode, nie pamiętam, czy była to 3.3 czy 3.4. Aby to naprawić, konieczne będzie jawne kodowanie do UTF-16. To nie jest błąd.
Mark Ransom,
1
@YngvarKristiansen W końcu udało mi się wprowadzić te zmiany. Jestem teraz pewien, że ten kod działa dla większości nowoczesnych wersji Pythona i wszystkich możliwych znaków Unicode.
Mark Ransom
10
Wygląda na to, że musisz dodać win32clipboard do swoich pakietów witryn. Jest to część pakietu pywin32
byłaby znacznie lepsza odpowiedź z jakimś przykładowym kodem.
Jean-François Fabre
5
Możesz użyć modułu clipboard. Jest prosty i niezwykle łatwy w użyciu. Działa z komputerami Mac , Windows i Linux . Uwaga: Jest to alternatywa dlapyperclip
To wydaje się najlepszym rozwiązaniem. Schowek można zainstalować za pomocą pip install clipboard.
vy32
5
Oto najłatwiejszy i najbardziej niezawodny sposób, jaki znalazłem, jeśli nie masz nic przeciwko Pandom. Jednak nie sądzę, że jest to oficjalnie część interfejsu API Pandas, więc może zepsuć się z przyszłymi aktualizacjami. Działa od 0.25.3
To dobre rozwiązanie, ale wyobrażam sobie, że wiele Pythona jest rozwijanych i uruchamianych w środowisku IDE
Jesse Reza Khorasanee
2
Oprócz odpowiedzi Marka Ransoma przy użyciu ctypów: To nie działa w przypadku (wszystkich?) Systemów x64, ponieważ uchwyty wydają się być obcięte do rozmiaru wewnętrznego. Jawne definiowanie argumentów i zwracanych wartości pomaga przezwyciężyć ten problem.
Pomocne byłoby wyjaśnienie problemu i rozwiązania.
showdev
funkcja kopiowania tekstu do schowka. używając biblioteki wx python (nigdy nie nauczyłem się TK) inne rozwiązanie zadanego tutaj pytania.
jlk
Edytuj odpowiedź w celu dołączenia wyjaśnienia problemu / rozwiązania @jlk - dzięki temu odpowiedzi są bardziej przydatne. Ponadto dziękuję za próbę, ale przypuszczam, że oryginalny plakat miał jakiś powód, aby prosić o Tk konkretnie.
lodowaty
0
Fragment, który tu udostępniam, korzysta z możliwości formatowania plików tekstowych: co zrobić, jeśli chcesz skopiować złożone dane wyjściowe do schowka? (Powiedz tablicę numpy w kolumnie lub liście czegoś)
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 befor 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
działa tylko w systemie Windows, myślę, że można go dostosować do systemu Linux lub Mac. Może trochę skomplikowane ...
Nie wszystkie odpowiedzi działały dla moich różnych konfiguracji Pythona, więc to rozwiązanie wykorzystuje tylko moduł podprocesu. Jednak copy_keywordmusi być pbcopyna Mac lub clipWindows:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Oto bardziej rozbudowany kod, który automatycznie sprawdza, jaki jest obecny system operacyjny:
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)
być może możesz być konstruktywny i powiedzieć otrzymany komunikat o błędzie oraz używaną wersję Pythona. 2 linie, które napisałem, działają z
Pythonem
2
Pytanie brzmi: „jak skopiować ciąg znaków do schowka w systemie Windows za pomocą Pythona”. Z pewnością nie ulega to awarii, ale nie do końca spełnia to pytanie, ponieważ w rzeczywistości nic
Antti Haapala
2
P: Jak skopiować ciąg do schowka Windows za pomocą Pythona? Odp .: Zaimportuj bibliotekę GUI i utwórz obiekt główny. . Przepraszam, jak to w ogóle odpowiada na zadane pytanie?
Martijn Pieters
za pomocą python3 możesz zrobić coś zgodnie z tymi liniami: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # wyczyść bieżący schowek> mystring = „Hello World”> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19]: „Hello World”>
tagoma
2
Następnie odpowiedz na to pytanie. W tej chwili nie ma tu nic pomocnego. Czy przetestowałeś to w systemie Windows?
Odpowiedzi:
Właściwie,
pywin32
ictypes
wydaje się być przesadą dla tego prostego zadania.Tkinter
to wieloplatformowy framework GUI, który jest domyślnie dostarczany z Pythonem i ma metody dostępu do schowka wraz z innymi fajnymi rzeczami.Jeśli wystarczy wstawić tekst do schowka systemowego, zrobi to:
I to wszystko, nie trzeba się bawić z bibliotekami stron trzecich specyficznymi dla platformy.
Jeśli używasz Python 3, wymienić
TKinter
siętkinter
.źródło
r.destroy()
. Po wywołaniu tego schowek staje się pusty, a naciśnięcie Ctrl-V może spowodować zawieszenie się aplikacji docelowej. (System operacyjny: Windows 7 x64)Nie miałem rozwiązania, tylko obejście.
Windows Vista i nowsze mają wbudowane polecenie o nazwie,
clip
które pobiera dane wyjściowe polecenia z wiersza poleceń i umieszcza je w schowku. Na przykład,ipconfig | clip
.Zrobiłem więc funkcję z
os
modułem, który pobiera ciąg znaków i dodaje go do schowka za pomocą wbudowanego rozwiązania Windows.Jednak, jak zauważono wcześniej w komentarzach, jednym minusem tego podejścia jest to, że
echo
polecenie automatycznie dodaje nowy wiersz na końcu tekstu. Aby tego uniknąć, możesz użyć zmodyfikowanej wersji polecenia:Jeśli korzystasz z systemu Windows XP, będzie on działać po prostu wykonując czynności opisane w sekcji Kopiuj i wklej z wiersza polecenia systemu Windows XP Pro bezpośrednio do schowka .
źródło
text
zawiera| calc.exe
?text with " quotes and | pipe
staje się"text with "" quotes and | pipe"
Chociaż może to mieć problemy w systemach z Windows starszymi niż 95.type
. Piszę tekst do pliku i używam poleceniatype myfile.txt | clip
.Możesz także użyć ctypes, aby skorzystać z Windows API i uniknąć ogromnego pakietu pywin32. Oto, czego używam (przepraszam za kiepski styl, ale pomysł już istnieje):
źródło
bytes(data,"ascii")
nabytes(data)
. Dzięki za odpowiedź na pytanie, nie mogę użyć pywin32 lub tk lub kilku innych rzeczy i to działa.bytes(data, "mbcs")
będzie działać z domyślnym kodowaniem systemu Windows. Pozwolił mi załadować to do schowka"másreas ç saod é í ó u* ü ö ï/"
i poprawnie odczytać.Możesz użyć pyperclip - międzyplatformowego modułu schowka. Lub Xerox - podobny moduł, z tym wyjątkiem, że wymaga modułu Python win32 do pracy w systemie Windows.
źródło
pyperclip
nie robi Unicode w systemie Windows.win32clipboard
robi.pyperclip
łatka została zaakceptowana;c:\python34\Scripts\pip install --upgrade pyperclip
do obsługi tekstu Unicode.pyperclip
nie jestpaperclip
. Podobnie jak w 2016 roku pyperclip działa również ze znakami Unicode. Testowałem znaki ± ° © © αβγθΔΨΦåäö do pracy na Win10 64-bit, z Python 3.5 i pyperclip 1.5.27.Możesz użyć doskonałych pand, które mają wbudowaną obsługę schowka, ale musisz przejść przez ramkę danych.
źródło
pyperclip
tak używa , więc lepiej użyjpyperpclip
pandas
jest łatwo dostępny, aleimport pyperclip
nie działa. Nie zgadzam się więc z „lepszym użyciem pyperclipa”.import pandas.io.clipboard as pyperclip
lub nazwać go, jak chcesz. Tampandas
przynajmniej się znajdujeNajprostszym sposobem jest użycie klipsa . Działa w Pythonie 2 i 3.
Aby zainstalować tę bibliotekę, użyj:
Przykładowe użycie:
Jeśli chcesz uzyskać zawartość schowka:
źródło
pyperclip
moduł jest dostarczany z Pythonem? Które wersje? Nie widzę tego w Pythonie 2.7 ...pyperclip.paste()
nie działa z obrazami, po prostu zwracaNoneType
błąd. ale działa z kliknięciem prawym przyciskiem myszy i skopiowaniem, a następnie za pomocą Pythona wkleić skopiowane wyniki.Próbowałem różnych rozwiązań, ale jest to najprostsze, które przechodzi mój test :
Testowano OK w Pythonie 3.4 w systemie Windows 8.1 i Pythonie 2.7 w systemie Windows 7. Również podczas odczytywania danych Unicode z uniksowymi liniami skopiowanymi z systemu Windows. Skopiowane dane pozostają w schowku po zamknięciu Pythona:
"Testing the “clip—board”: 📋"
Jeśli nie chcesz żadnych zewnętrznych zależności, użyj tego kodu (teraz stanowi część platformy
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):źródło
win32clipboard
? To nie jest część mojego Pythona 2.7. I dlaczegopaste
używaCF_TEXT
zamiastCF_UNICODETEXT
?Z jakiegoś powodu nigdy nie udało mi się uzyskać rozwiązania Tk dla mnie. Rozwiązanie kapace jest o wiele bardziej praktyczne, ale formatowanie jest sprzeczne z moim stylem i nie działa z Unicode. Oto zmodyfikowana wersja.
Powyższe zmieniło się od czasu utworzenia tej odpowiedzi, aby lepiej radzić sobie z rozszerzonymi znakami Unicode i Pythonem 3. Został przetestowany zarówno w Pythonie 2.7, jak i 3.5, i działa nawet z emoji takimi jak
\U0001f601 (😁)
.źródło
put()
Funkcja wymaga również pracy; emoji „📋” (\ U0001f400) jest kopiowane jako „🐀” (\ U0001f4cb) lub „📋.” zmienia się w „📋”.Wygląda na to, że musisz dodać win32clipboard do swoich pakietów witryn. Jest to część pakietu pywin32
źródło
Możesz użyć modułu
clipboard
. Jest prosty i niezwykle łatwy w użyciu. Działa z komputerami Mac , Windows i Linux .Uwaga: Jest to alternatywa dla
pyperclip
Po zainstalowaniu zaimportuj:
Następnie możesz skopiować w następujący sposób:
Możesz również wkleić skopiowany tekst:
źródło
pip install clipboard
.Oto najłatwiejszy i najbardziej niezawodny sposób, jaki znalazłem, jeśli nie masz nic przeciwko Pandom. Jednak nie sądzę, że jest to oficjalnie część interfejsu API Pandas, więc może zepsuć się z przyszłymi aktualizacjami. Działa od 0.25.3
źródło
Widżety mają także nazwaną metodę,
.clipboard_get()
która zwraca zawartość schowka (chyba że wystąpi jakiś błąd w zależności od typu danych w schowku).clipboard_get()
Metoda jest wymieniona w tym raportu o błędzie:http://bugs.python.org/issue14777
O dziwo, ta metoda nie została wymieniona w typowych (ale nieoficjalnych) źródłach dokumentacji online TkInter, do których zwykle się odnoszę.
źródło
Myślę, że istnieje o wiele prostsze rozwiązanie tego problemu.
Następnie uruchom swój program w wierszu poleceń
Spowoduje to przesłanie pliku wyjściowego do schowka
źródło
Oprócz odpowiedzi Marka Ransoma przy użyciu ctypów: To nie działa w przypadku (wszystkich?) Systemów x64, ponieważ uchwyty wydają się być obcięte do rozmiaru wewnętrznego. Jawne definiowanie argumentów i zwracanych wartości pomaga przezwyciężyć ten problem.
źródło
źródło
Fragment, który tu udostępniam, korzysta z możliwości formatowania plików tekstowych: co zrobić, jeśli chcesz skopiować złożone dane wyjściowe do schowka? (Powiedz tablicę numpy w kolumnie lub liście czegoś)
działa tylko w systemie Windows, myślę, że można go dostosować do systemu Linux lub Mac. Może trochę skomplikowane ...
przykład:
Ctrl + V w dowolnym edytorze tekstu:
źródło
To jest ulepszona odpowiedź atomizera .
Uwaga 2 połączenia
update()
i200 ms
opóźnienia między nimi. Chronią aplikacje zamrażające z powodu niestabilnego stanu schowka:źródło
Użyj biblioteki schowka Pythona!
Schowek zawiera teraz „abc”. Szczęśliwego wklejania!
źródło
Nie wszystkie odpowiedzi działały dla moich różnych konfiguracji Pythona, więc to rozwiązanie wykorzystuje tylko moduł podprocesu. Jednak
copy_keyword
musi byćpbcopy
na Mac lubclip
Windows:Oto bardziej rozbudowany kod, który automatycznie sprawdza, jaki jest obecny system operacyjny:
źródło
Możesz użyć modułu winclip32! zainstalować:
kopiować:
uzyskać:
Więcej informacji: https://pypi.org/project/winclip32/
źródło
Fragment kodu, aby skopiować schowek:
Utwórz otoki kod Pythona w module o nazwie ( clipboard.py ):
Następnie zaimportuj powyższy moduł do swojego kodu.
Muszę wyrazić uznanie dla wpisu na blogu Dostęp do schowka w IronPython .
źródło
możesz spróbować:
źródło
źródło