Bagaimana cara menyalin string ke clipboard di Windows menggunakan Python?
193
Saya mencoba membuat aplikasi Windows dasar yang membangun string dari input pengguna dan kemudian menambahkannya ke clipboard. Bagaimana cara menyalin string ke clipboard menggunakan Python?
Lihat juga jawaban saya untuk pertanyaan terkait tentang menyalin ke clipboard menggunakan Tkinter tanpa menunjukkan jendela. Ini mencakup fungsi Python yang menggantikan / mengembalikan teks clipboard menggunakan Tkinter.
Edward
Jawaban:
286
Sebenarnya, pywin32dan ctypestampaknya menjadi kerja keras untuk tugas sederhana ini. Tkinteradalah kerangka kerja GUI lintas-platform, yang dikirimkan dengan Python secara default dan memiliki metode mengakses clipboard bersama dengan hal-hal keren lainnya.
Jika semua yang Anda butuhkan adalah meletakkan teks ke clipboard sistem, ini akan melakukannya:
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()
Dan itu saja, tidak perlu dipusingkan dengan perpustakaan pihak ketiga platform-spesifik.
Jika Anda menggunakan Python 3, ganti TKinterdengan tkinter.
Dapatkan konten clipboard: result = r.selection_get (selection = "CLIPBOARD")
MJ
34
@SurDin Tkinter diubah namanya menjadi tkinter dalam python 3, jadi itu tergantung pada versi apa yang Anda gunakan.
Jujur Abe
24
semua aplikasi saya menjadi tidak responsif setelah menempelkan isi clipboard dengan fungsi ini, anehnya, mendapatkan hasilnya berfungsi dengan baik.
Bartlomiej Lewandowski
14
Ini berfungsi jika saya tidak menelepon r.destroy(). Begitu saya menyebutnya, clipboard menjadi kosong dan menekan Ctrl-V dapat menyebabkan aplikasi target membeku. (OS: Windows 7 x64)
netvope
8
Bagi saya ini tidak berfungsi untuk python 3.4, tetapi ini berfungsi untuk python 2.7 (ya, dengan tkinter dan bukan Tkinter)
Matty
79
Saya tidak punya solusi, hanya solusinya.
Windows Vista dan seterusnya memiliki perintah inbuilt yang disebut clipyang mengambil output dari perintah dari baris perintah dan memasukkannya ke clipboard. Sebagai contoh ipconfig | clip,.
Jadi saya membuat fungsi dengan osmodul yang mengambil string dan menambahkannya ke clipboard menggunakan solusi Windows bawaan.
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.
Namun seperti yang disebutkan sebelumnya di komentar, satu kelemahan dari pendekatan ini adalah bahwa echoperintah secara otomatis menambahkan baris baru ke bagian akhir teks Anda. Untuk menghindari ini, Anda dapat menggunakan versi modifikasi dari perintah:
@ WilliBallenthin maka Anda harus membungkusnya dengan tanda kutip ganda. Tetapi bagaimana jika itu MENGANDUNG tanda kutip ganda? Maka Anda perlu menggandakan tanda kutip ganda. text with " quotes and | pipemenjadi "text with "" quotes and | pipe" Meskipun ini mungkin memiliki masalah pada sistem dengan windows yang lebih tua dari 95.
ColBeseder
5
Fungsi yang sangat tidak aman ... Konten yang dikirim ke clipboard Anda sekarang merupakan vektor entri dan karenanya meningkatkan permukaan serangan Anda.
Phil L.
2
Saya juga membutuhkan dukungan untuk baris baru, jadi saya memodifikasi ini untuk digunakan type. Saya menulis teks saya ke file, dan menggunakan perintah type myfile.txt | clip.
Mixopteryx
1
Meskipun ini adalah jawaban terbaik bagi saya, ia memiliki masalah (Python 3.5, Windows 10); baris baru yang tidak diinginkan selalu ditambahkan di akhir string. Bagaimana cara menghindarinya?
mmj
42
Anda juga dapat menggunakan ctypes untuk memasuki Windows API dan menghindari paket pywin32 yang masif. Inilah yang saya gunakan (alasan gaya buruk, tapi idenya ada di sana):
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()
Setidaknya dalam python 2,6 x64, saya harus mengubah bytes(data,"ascii")ke bytes(data). Terima kasih telah menjawab pertanyaan, saya tidak dapat menggunakan pywin32 atau tk atau sejumlah hal lain dan ini berfungsi.
Pat Corwin
1
Jangan khawatir, tetapi perhatikan bahwa data yang dikembalikan dari clipboard sebenarnya dalam pengkodean lain, saya percaya itu adalah Windows CP-1252. Ini agak diretas bersama, tetapi jika Anda tidak menggunakan pengkodean yang benar maka karakter non-ascii akan memunculkan kesalahan atau pendekodean yang salah.
kapace
Nama variabel tidak perlu komentar, dan semuanya harus mendukung Unicode.
Cees Timmerman
bytes(data, "mbcs")akan bekerja dengan pengkodean default windows. Mengizinkan saya memuat ini ke clipboard "másreas ç saod é í ó u* ü ö ï/"dan membacanya kembali dengan benar.
mvbentes
1
menggunakan mbcs memberi saya ini: OSError: pengecualian: penulisan pelanggaran akses 0x000000000000000000
Seaky Lone
35
Anda dapat menggunakan modul clipper cross-platform pyperclip . Atau Xerox - modul serupa, kecuali membutuhkan modul Python win32 untuk bekerja di Windows.
+1. Saya suka solusi ini. Ini bahkan lebih sederhana daripada solusi Tkinter yang diterima. Jika Anda mengimpor panda, tidak ada biaya tambahan. Ini juga berfungsi di semua platform. Bahkan tidak (dalam kebanyakan kasus) memerlukan menginstal paket baru.
ChaimG
4
ini pypercliptetap menggunakan , jadi lebih baik gunakanpyperpclip
maxbellec
1
Bagi kebanyakan orang (yaitu saya), pandassudah tersedia tetapi import pypercliptidak berfungsi. Jadi saya tidak setuju dengan "lebih baik menggunakan pyperclip".
Dokter Core
1
Jika Anda dibatasi hanya menggunakan panda, Anda bisa menggunakan pyperclip secara langsung import pandas.io.clipboard as pyperclipatau beri nama apa pun yang Anda inginkan. Di situlah tempatnya pandas, setidaknya
David Culbreth
1
Ini tampaknya menambahkan karakter baris baru ke string yang Anda salin
Gijs van Oort
19
Cara paling sederhana adalah dengan pyperclip . Bekerja dalam python 2 dan 3.
Dan apakah pyperclipmodul dilengkapi dengan Python? Versi yang mana? Saya tidak melihatnya dalam Python 2.7 ...
SamB
8
Ya, downvote jawaban yang dengan mudah menyelesaikan masalah dalam waktu kurang dari 5 baris; karena sedikit detail seperti referensi lebih penting; penggunaan stackoverflow teman saya. Saya tetap akan mengedit untuk nitpickers. Kiat untuk Anda: turunkan jawaban yang tidak berguna atau yang tidak menyelesaikan masalah; upvote jawaban yang memecahkan masalah atau paling tidak berguna dan buat saran di komentar untuk meningkatkan jawaban yang bermanfaat alih-alih downvoting.
maviz
3
Tanpa referensi, Anda tidak menyelesaikan apa pun. Tetapi karena Anda menambahkan tautan, saya akan menghapus downvote, karena jawabannya baik sekarang. Masalah saya yang lebih besar adalah bahwa itu tampak seperti impor perpustakaan standar; itu tampak seperti kode yang dapat Anda salin / tempel ketika tidak.
Gloweye
pyperclip.paste()tidak bekerja dengan gambar hanya mengembalikan NoneTypekesalahan. tetapi berfungsi dengan klik kanan dan salin kemudian gunakan python untuk menempelkan hasil yang disalin.
JayRizzo
11
Saya telah mencoba berbagai solusi, tetapi ini adalah yang paling sederhana yang lulus dari pengujian saya :
#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'))
Diuji OK dalam Python 3.4 pada Windows 8.1 dan Python 2.7 pada Windows 7. Juga ketika membaca data Unicode dengan Unix linefeeds disalin dari Windows. Data yang disalin tetap berada di clipboard setelah Python keluar:"Testing
the “clip—board”: 📋"
Jika Anda tidak menginginkan dependensi eksternal, gunakan kode ini (sekarang bagian dari lintas-platform 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
Di mana Anda mendapatkan win32clipboard? Itu bukan bagian dari Python 2.7 saya. Dan mengapa pastemenggunakan CF_TEXTbukan CF_UNICODETEXT?
Mark Ransom
@ MarkRansom pywin32, dan karena pengujian saya bekerja dengan baik sampai saya membuatnya lebih sulit menggunakan 📋. Saya telah memperbarui kodenya.
Cees Timmerman
11
Untuk beberapa alasan saya tidak pernah bisa mendapatkan solusi Tk untuk saya. solusi kapace jauh lebih bisa diterapkan, tetapi formatnya bertentangan dengan gaya saya dan itu tidak bekerja dengan Unicode. Ini versi modifikasi.
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
Di atas telah berubah sejak jawaban ini pertama kali dibuat, untuk lebih baik mengatasi karakter Unicode dan Python 3. Ia telah diuji dalam Python 2.7 dan 3.5, dan berfungsi bahkan dengan emoji seperti \U0001f601 (😁).
@CeesTimmerman Saya ingin memiliki sistem Windows 8.1 untuk menguji alasannya. Saya mungkin memiliki kesempatan untuk menyelidiki hari ini. Apakah Anda yakin ada teks di clipboard?
Mark Ransom
Iya. Saya sudah banyak menguji kode clipboard dengan Python selama tiga hari terakhir.
Cees Timmerman
The put()Fungsi juga perlu kerja; emoji "📋" (\ U0001f400) disalin sebagai "🐀" (\ U0001f4cb), atau "📋." beralih ke "📋".
Cees Timmerman
@CeesTimmerman yang menjelaskannya. Representasi Unicode internal berubah, saya tidak ingat apakah itu 3,3 atau 3,4. Untuk memperbaikinya akan membutuhkan pengkodean eksplisit ke UTF-16. Itu bukan bug.
Mark Ransom
1
@ YngvarKristiansen Saya akhirnya sempat membuat perubahan itu. Saya yakin sekarang bahwa kode ini berfungsi untuk sebagian besar versi Python modern dan setiap karakter Unicode yang mungkin.
Mark Ransom
10
Sepertinya Anda perlu menambahkan win32clipboard ke paket situs Anda. Itu bagian dari paket pywin32
akan menjadi jawaban yang jauh lebih baik dengan beberapa kode contoh.
Jean-François Fabre
6
Inilah cara yang paling mudah dan dapat diandalkan yang saya temukan jika Anda baik-baik saja bergantung pada Panda. Namun saya tidak berpikir ini secara resmi bagian dari API Pandas sehingga mungkin akan putus dengan pembaruan di masa mendatang. Ia bekerja pada 0.25.3
Anda dapat menggunakan modul clipboard. Ini sederhana dan sangat mudah digunakan. Bekerja dengan Mac , Windows , & Linux . Catatan: Ini merupakan alternatifpyperclip
Ini sepertinya solusi terbaik. clipboard dapat diinstal dengan pip install clipboard.
vy32
3
Widget juga memiliki metode bernama .clipboard_get()yang mengembalikan konten clipboard (kecuali beberapa jenis kesalahan terjadi berdasarkan jenis data di clipboard).
Ini solusi yang bagus tapi saya membayangkan banyak python dikembangkan dan dijalankan dalam IDE
Jesse Reza Khorasanee
2
Selain jawaban Mark Ransom menggunakan ctypes: Ini tidak bekerja untuk sistem (semua?) X64 karena pegangan tampaknya dipotong ke ukuran int. Mendefinisikan args dan mengembalikan nilai secara eksplisit membantu mengatasi masalah ini.
Penjelasan tentang masalah dan solusi akan sangat membantu.
showdev
fungsi untuk menyalin teks ke clipboard. menggunakan perpustakaan python wx (saya tidak pernah belajar TK) solusi lain untuk pertanyaan yang diajukan di sini.
jlk
Jangan ragu untuk mengedit jawaban untuk memasukkan penjelasan Anda tentang masalah / solusi @jlk - melakukan ini umumnya membuat jawaban lebih bermanfaat. Juga, terima kasih sudah mencoba, tapi kurasa poster aslinya punya alasan khusus untuk meminta Tk.
icedwater
0
Cuplikan yang saya bagikan di sini memanfaatkan kemampuan untuk memformat file teks: bagaimana jika Anda ingin menyalin output yang kompleks ke clipboard? (Katakan array numpy di kolom atau daftar sesuatu)
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
hanya berfungsi untuk windows, bisa diadaptasi untuk linux atau mac kurasa. Mungkin agak rumit ...
Tidak semua jawaban berfungsi untuk berbagai konfigurasi python saya jadi solusi ini hanya menggunakan modul subproses. Namun, copy_keywordharus pbcopyuntuk Mac atau clipuntuk Windows:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Berikut adalah beberapa kode yang lebih luas yang secara otomatis memeriksa apa sistem operasi saat ini:
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)
mungkin Anda bisa membangun sebuah pesan kesalahan kirim yang Anda dapatkan dan versi python yang Anda gunakan. 2 baris saya tulis bekerja dengan python 2. terima kasih
tagoma
2
Pertanyaannya adalah "bagaimana cara menyalin string ke clipboard di Windows menggunakan Python". Tentu saja ini tidak crash tetapi tidak cukup memuaskan dalam pertanyaan karena sebenarnya tidak melakukan apa
Antti Haapala
2
T: bagaimana cara menyalin string ke clipboard Windows menggunakan Python? A: mengimpor perpustakaan GUI dan membuat objek root. . Maaf, bagaimana ini bahkan menjawab pertanyaan yang dinyatakan?
Martijn Pieters
dengan python3 Anda dapat melakukan sesuatu di sepanjang baris ini: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # kosongkan clipboard saat ini> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Keluar [19]: 'Hello World'>
tagoma
2
Maka jadikan itu jawabannya. Sebenarnya, Anda tidak benar-benar memiliki sesuatu yang membantu di sini. Sudahkah Anda mengujinya di Windows?
Jawaban:
Sebenarnya,
pywin32
danctypes
tampaknya menjadi kerja keras untuk tugas sederhana ini.Tkinter
adalah kerangka kerja GUI lintas-platform, yang dikirimkan dengan Python secara default dan memiliki metode mengakses clipboard bersama dengan hal-hal keren lainnya.Jika semua yang Anda butuhkan adalah meletakkan teks ke clipboard sistem, ini akan melakukannya:
Dan itu saja, tidak perlu dipusingkan dengan perpustakaan pihak ketiga platform-spesifik.
Jika Anda menggunakan Python 3, ganti
TKinter
dengantkinter
.sumber
r.destroy()
. Begitu saya menyebutnya, clipboard menjadi kosong dan menekan Ctrl-V dapat menyebabkan aplikasi target membeku. (OS: Windows 7 x64)Saya tidak punya solusi, hanya solusinya.
Windows Vista dan seterusnya memiliki perintah inbuilt yang disebut
clip
yang mengambil output dari perintah dari baris perintah dan memasukkannya ke clipboard. Sebagai contohipconfig | clip
,.Jadi saya membuat fungsi dengan
os
modul yang mengambil string dan menambahkannya ke clipboard menggunakan solusi Windows bawaan.Namun seperti yang disebutkan sebelumnya di komentar, satu kelemahan dari pendekatan ini adalah bahwa
echo
perintah secara otomatis menambahkan baris baru ke bagian akhir teks Anda. Untuk menghindari ini, Anda dapat menggunakan versi modifikasi dari perintah:Jika Anda menggunakan Windows XP, itu akan berhasil hanya mengikuti langkah-langkah di Salin dan tempel dari prompt perintah Windows XP Pro langsung ke Clipboard .
sumber
text
mengandung| calc.exe
?text with " quotes and | pipe
menjadi"text with "" quotes and | pipe"
Meskipun ini mungkin memiliki masalah pada sistem dengan windows yang lebih tua dari 95.type
. Saya menulis teks saya ke file, dan menggunakan perintahtype myfile.txt | clip
.Anda juga dapat menggunakan ctypes untuk memasuki Windows API dan menghindari paket pywin32 yang masif. Inilah yang saya gunakan (alasan gaya buruk, tapi idenya ada di sana):
sumber
bytes(data,"ascii")
kebytes(data)
. Terima kasih telah menjawab pertanyaan, saya tidak dapat menggunakan pywin32 atau tk atau sejumlah hal lain dan ini berfungsi.bytes(data, "mbcs")
akan bekerja dengan pengkodean default windows. Mengizinkan saya memuat ini ke clipboard"másreas ç saod é í ó u* ü ö ï/"
dan membacanya kembali dengan benar.Anda dapat menggunakan modul clipper cross-platform pyperclip . Atau Xerox - modul serupa, kecuali membutuhkan modul Python win32 untuk bekerja di Windows.
sumber
pyperclip
tidak melakukan Unicode di Windows.win32clipboard
tidak.pyperclip
Tambalan saya diterima;c:\python34\Scripts\pip install --upgrade pyperclip
untuk menangani teks Unicode.pyperclip
bukanpaperclip
. Juga, seperti pada 2016, pyperclip bekerja dengan karakter Unicode juga. Saya telah menguji karakter ± ° © bahkan αβγθΔΨΦåäö untuk bekerja pada Win10 64-bit, dengan Python 3.5 dan pyperclip 1.5.27.Anda dapat menggunakan panda yang luar biasa, yang memiliki dukungan clipboard bawaan, tetapi Anda harus melewati DataFrame.
sumber
pyperclip
tetap menggunakan , jadi lebih baik gunakanpyperpclip
pandas
sudah tersedia tetapiimport pyperclip
tidak berfungsi. Jadi saya tidak setuju dengan "lebih baik menggunakan pyperclip".import pandas.io.clipboard as pyperclip
atau beri nama apa pun yang Anda inginkan. Di situlah tempatnyapandas
, setidaknyaCara paling sederhana adalah dengan pyperclip . Bekerja dalam python 2 dan 3.
Untuk menginstal perpustakaan ini, gunakan:
Contoh penggunaan:
Jika Anda ingin mendapatkan konten clipboard:
sumber
pyperclip
modul dilengkapi dengan Python? Versi yang mana? Saya tidak melihatnya dalam Python 2.7 ...pyperclip.paste()
tidak bekerja dengan gambar hanya mengembalikanNoneType
kesalahan. tetapi berfungsi dengan klik kanan dan salin kemudian gunakan python untuk menempelkan hasil yang disalin.Saya telah mencoba berbagai solusi, tetapi ini adalah yang paling sederhana yang lulus dari pengujian saya :
Diuji OK dalam Python 3.4 pada Windows 8.1 dan Python 2.7 pada Windows 7. Juga ketika membaca data Unicode dengan Unix linefeeds disalin dari Windows. Data yang disalin tetap berada di clipboard setelah Python keluar:
"Testing the “clip—board”: 📋"
Jika Anda tidak menginginkan dependensi eksternal, gunakan kode ini (sekarang bagian dari lintas-platform
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):sumber
win32clipboard
? Itu bukan bagian dari Python 2.7 saya. Dan mengapapaste
menggunakanCF_TEXT
bukanCF_UNICODETEXT
?Untuk beberapa alasan saya tidak pernah bisa mendapatkan solusi Tk untuk saya. solusi kapace jauh lebih bisa diterapkan, tetapi formatnya bertentangan dengan gaya saya dan itu tidak bekerja dengan Unicode. Ini versi modifikasi.
Di atas telah berubah sejak jawaban ini pertama kali dibuat, untuk lebih baik mengatasi karakter Unicode dan Python 3. Ia telah diuji dalam Python 2.7 dan 3.5, dan berfungsi bahkan dengan emoji seperti
\U0001f601 (😁)
.sumber
put()
Fungsi juga perlu kerja; emoji "📋" (\ U0001f400) disalin sebagai "🐀" (\ U0001f4cb), atau "📋." beralih ke "📋".Sepertinya Anda perlu menambahkan win32clipboard ke paket situs Anda. Itu bagian dari paket pywin32
sumber
Inilah cara yang paling mudah dan dapat diandalkan yang saya temukan jika Anda baik-baik saja bergantung pada Panda. Namun saya tidak berpikir ini secara resmi bagian dari API Pandas sehingga mungkin akan putus dengan pembaruan di masa mendatang. Ia bekerja pada 0.25.3
sumber
Anda dapat menggunakan modul
clipboard
. Ini sederhana dan sangat mudah digunakan. Bekerja dengan Mac , Windows , & Linux .Catatan: Ini merupakan alternatif
pyperclip
Setelah menginstal, impor:
Kemudian Anda dapat menyalin seperti ini:
Anda juga dapat menempelkan teks yang disalin:
sumber
pip install clipboard
.Widget juga memiliki metode bernama
.clipboard_get()
yang mengembalikan konten clipboard (kecuali beberapa jenis kesalahan terjadi berdasarkan jenis data di clipboard).The
clipboard_get()
Metode disebutkan dalam laporan bug ini:http://bugs.python.org/issue14777
Anehnya, metode ini tidak disebutkan dalam sumber dokumentasi TkInter online yang umum (tetapi tidak resmi) yang biasanya saya lihat.
sumber
Saya pikir ada solusi yang lebih sederhana untuk ini.
Kemudian jalankan program Anda di baris perintah
Ini akan menyalurkan output file Anda ke clipboard
sumber
Selain jawaban Mark Ransom menggunakan ctypes: Ini tidak bekerja untuk sistem (semua?) X64 karena pegangan tampaknya dipotong ke ukuran int. Mendefinisikan args dan mengembalikan nilai secara eksplisit membantu mengatasi masalah ini.
sumber
sumber
Cuplikan yang saya bagikan di sini memanfaatkan kemampuan untuk memformat file teks: bagaimana jika Anda ingin menyalin output yang kompleks ke clipboard? (Katakan array numpy di kolom atau daftar sesuatu)
hanya berfungsi untuk windows, bisa diadaptasi untuk linux atau mac kurasa. Mungkin agak rumit ...
contoh:
Ctrl + V di editor teks apa pun:
sumber
Ini adalah jawaban yang ditingkatkan dari alat penyemprot .
Catatan 2 panggilan
update()
dan200 ms
tunda di antara mereka. Mereka melindungi aplikasi yang membeku karena keadaan clipboard yang tidak stabil:sumber
Gunakan perpustakaan clipboard python!
Clipboard mengandung 'abc' sekarang. Selamat menyisipkan!
sumber
Tidak semua jawaban berfungsi untuk berbagai konfigurasi python saya jadi solusi ini hanya menggunakan modul subproses. Namun,
copy_keyword
haruspbcopy
untuk Mac atauclip
untuk Windows:Berikut adalah beberapa kode yang lebih luas yang secara otomatis memeriksa apa sistem operasi saat ini:
sumber
Anda dapat menggunakan modul winclip32! Install:
untuk menyalin:
mendapatkan:
untuk informasi lebih lanjut: https://pypi.org/project/winclip32/
sumber
Cuplikan kode untuk menyalin clipboard:
Buat kode Python wrapper dalam modul bernama ( clipboard.py ):
Kemudian impor modul di atas ke dalam kode Anda.
Saya harus memberi kredit ke posting blog Akses Clipboard di IronPython .
sumber
Anda dapat mencoba ini:
sumber
sumber