Вот пример, который сначала устанавливает данные буфера обмена, а затем получает их:
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.
Стоит отметить, что в py34, win7 SetClipboardText не работал без предшествующего вызова EmptyClipboard
CoderTao
Этот модуль полезен, если вы хотите выполнять более сложные операции, например, извлекать содержимое в формате HTML из буфера обмена. См stackoverflow.com/questions/17298897/...
xji
2
@Norfeldt Если нет собственного способа, вы можете легко создать свой собственный настраиваемый объект, который поддерживает «with»
Элияс Дапшаускас
42
вы можете легко сделать это с помощью встроенного модуля Tkinter, который в основном представляет собой библиотеку графического интерфейса. Этот код создает пустой виджет для получения содержимого буфера обмена из ОС.
Некоторый код, который получит значение буфера обмена через Tkinter: from Tkinter import Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs 08
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
defget_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())
на 3.6 подходит? он установлен успешно, но при использовании метода paste () он дает мне ошибку: «из версии импорта PySide как 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
Да, команда paste ищет Pyside, и, поскольку Pyside поддерживает только Python 3.4, она выдает ошибку
gaurav
Кажется, это самое простое решение для WSL с python3.6
записано
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()
Ответы:
Вы можете использовать модуль win32clipboard , который является частью pywin32 .
Вот пример, который сначала устанавливает данные буфера обмена, а затем получает их:
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
Важное напоминание из документации:
источник
вы можете легко сделать это с помощью встроенного модуля Tkinter, который в основном представляет собой библиотеку графического интерфейса. Этот код создает пустой виджет для получения содержимого буфера обмена из ОС.
#from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get()
источник
tkinter
вместоTkinter
. В противном случае это не сработало на моем python 3.7.3 64bit win10.Я видел много предложений по использованию модуля win32, но Tkinter предоставляет самый короткий и простой метод, который я видел, как в этом посте: Как скопировать строку в буфер обмена в Windows с помощью Python?
Кроме того, Tkinter входит в стандартную библиотеку Python.
источник
Если вы не хотите устанавливать дополнительные пакеты,
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())
источник
Я выяснил, что это самый простой способ получить доступ к буферу обмена из python:
1) Установите pyperclip:
pip install pyperclip
2) Использование:
import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string
Проверено на 64-разрядной версии Win10, Python 3.5 и Python 3.7.3 (64-разрядной версии). Кажется, работает и с символами, отличными от ASCII. Протестированные символы включают ± ° © © αβγθΔΨΦåäö
источник
Ответ, получивший наибольшее количество голосов выше, является странным в том смысле, что он просто очищает буфер обмена, а затем получает содержимое (которое затем становится пустым). Можно очистить буфер обмена, чтобы быть уверенным, что некоторый тип содержимого буфера обмена, такой как «форматированный текст», не «покрывает» ваше обычное текстовое содержимое, которое вы хотите сохранить в буфере обмена.
Следующий фрагмент кода заменяет все новые строки в буфере обмена пробелами, затем удаляет все двойные пробелы и, наконец, сохраняет содержимое обратно в буфер обмена:
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()
источник
Стандартная библиотека python делает это ...
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()
источник
Использовать буфер обмена библиотеки Pythons
Его просто используют так:
import clipboard clipboard.copy("this text is now in the clipboard") print clipboard.paste()
источник
from pyperclip import copy, paste
.clipboard
это лучшее имя. Эта функция должна быть включена в стандартную библиотеку Python.Попробуйте win32clipboard из пакета win32all (возможно, он установлен, если вы используете ActiveState Python).
См. Образец здесь: http://code.activestate.com/recipes/474121/
источник
Для моей консольной программы ответы с tkinter выше у меня не совсем сработали, потому что .destroy () всегда выдает ошибку:
или при использовании .withdraw () окно консоли не вернуло фокус.
Чтобы решить эту проблему, вам также необходимо вызвать .update () перед .destroy (). Пример:
# Python 3 import tkinter r = tkinter.Tk() text = r.clipboard_get() r.withdraw() r.update() r.destroy()
R.withdraw () предотвращает отображение кадра в течение миллисекунды, а затем он будет уничтожен, возвращая фокус обратно на консоль.
источник
Не очень прямая уловка:
Используйте горячую клавишу pyautogui:
Import pyautogui pyautogui.hotkey('ctrl', 'v')
Таким образом, вы можете вставлять данные из буфера обмена по своему усмотрению.
источник