Как читать текст из буфера обмена (windows) из python?



Как читать текст из буфера обмена (windows) из python?

2046   10  

10 ответов:

вы можете использовать модуль под названием 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

важное напоминание из документации:

когда окно закончит изучение или изменение буфера обмена, закройте буфер обмена, вызвав CloseClipboard. Это позволяет другим окна доступа к буферу обмена. Не устанавливайте объект на этот буфер обмена после вызова CloseClipboard.

вы можете легко сделать это через встроенный модуль Tkinter который в основном является библиотекой GUI. Этот код создает пустой виджет для получения содержимого буфера обмена из ОС.

#from tkinter import Tk  # Python 3
from Tkinter import Tk
Tk().clipboard_get()

Я видел много предложений по использованию модуля win32, но Tkinter предоставляет самый короткий и простой метод, который я видел, как в этом посте:Как скопировать строку в буфер обмена в Windows с помощью Python?

кроме того, Tkinter находится в стандартной библиотеке python.

самый популярный ответ выше странный в том смысле, что он просто очищает буфер обмена, а затем получает содержимое (которое затем пусто). Можно очистить буфер обмена, чтобы убедиться, что какой-то тип содержимого буфера обмена, например "форматированный текст", не "покрывает" ваш обычный текстовый контент, который вы хотите сохранить в буфере обмена.

следующий фрагмент кода заменяет все символы новой строки в буфер обмена пробел, а затем удаляет все двойные пробелы и, наконец, сохраняет содержимое обратно буфер обмена:

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

Если вы не хотите устанавливать дополнительные пакеты, ctypes может сделать эту работу также.

import ctypes

CF_TEXT = 1

kernel32 = ctypes.windll.kernel32
user32 = ctypes.windll.user32

user32.OpenClipboard(0)
if user32.IsClipboardFormatAvailable(CF_TEXT):
    data = user32.GetClipboardData(CF_TEXT)
    data_locked = kernel32.GlobalLock(data)
    text = ctypes.c_char_p(data_locked)
    print(text.value)
    kernel32.GlobalUnlock(data_locked)
else:
    print('no text in clipboard')
user32.CloseClipboard()

попробуйте win32clipboard из пакета win32all (который, вероятно, установлен, если вы находитесь на ActiveState Python).

смотрите пример здесь:http://code.activestate.com/recipes/474121/

для меня консольная программа ответы с tkinter выше, не совсем Работа для меня, потому что .destroy() всегда давал ошибку,:

не удается вызвать команду "событие": приложение было уничтожено во время выполнения...

или при использовании .withdraw () окно консоли не вернуло фокус обратно.

чтобы решить эту проблему, вы также должны позвонить .обновление () перед началом .уничтожать.)( Пример:

# Python 3
import tkinter

r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()

Р.снять() предотвращает отображение кадра в течение миллисекунды, а затем он будет уничтожен, возвращая фокус на консоль.

использовать библиотеку питонов буфер обмена

его просто использовали так:

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  

я узнал, что это был самый простой способ получить доступ к буферу обмена из 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. Кажется, работает и с не-ASCII символами. Проверенные символы включают ±°©©αβγδδψφåäö

стандартная библиотека Python делает это...

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()

Comments

    Ничего не найдено.