Скопируйте данные из буфера обмена в Linux, Mac и Windows с помощью одного скрипта Python - PullRequest
4 голосов
/ 24 октября 2011

Я пытаюсь создать скрипт на Python, который будет собирать данные, помещенные пользователем в буфер обмена, и предпочтительно сохранять их в виде списка, или в текстовом файле, или в строке / массиве / переменной, чтобы работать с ними позже.

Это должно работать на Linux всех версий (я бы сказал, Ubuntu), Mac OS всех версий и Windows всех версий.Я не уверен, что 32-битные и 64-битные системы имеют разные способы доступа к данным в буфере обмена, если они, я думаю, было бы безопасно сделать эту работу только для 32-битных версий, чтобы люди, работающие с 64-битными версиями, могли вернуться к 32-битнымверсия ОС.

Сложность, кроме необходимости работать на упомянутой ОС, заключается в том, что я хотел бы, чтобы скрипт выполнялся до тех пор, пока пользователь не остановит его и пока он запускает всеДанные, скопированные пользователем в буфер обмена, копируются в список или в текстовый файл или строку / массив / переменную.

Конечно, существует ограничение по времени, в течение которого пользователь может вводить данные в буфер обмена, чтобыЯ думал о цикле сканирования буфера обмена каждую секунду или каждые 500 миллисекунд, проверяю, изменился ли контент, и если есть, скопируйте его, в противном случае не копируйте его.

Есть ли единый способили модуль, который делает это на всех разных ОС или было бы лучше написать отдельные сценарии для этой задачи для различных OS?

Дело в том, что это часть более крупного проекта, который я хотел бы заставить работать на Linux, Mac и Windows, поэтому рассмотрим эти три варианта, а затем использую код Python, который можно использовать во всехупомянутая ОС для остальной части сценария / проекта была бы идеальной.Я слишком много спрашиваю из этого сценария о том, что он должен работать на Linux, Mac и Windows?

Ответы [ 4 ]

4 голосов
/ 25 октября 2011

Возможно, вам лучше использовать более продвинутый графический инструментарий, чем Tk, но он есть в стандартной библиотеке, поэтому он доступен везде.

В качестве очень простого примера:

import Tkinter
root = Tkinter.Tk()
root.withdraw() # Hide the main window (optional)
text_in_clipboard = root.clipboard_get()
print text_in_clipboard
4 голосов
/ 25 октября 2011

Библиотека xerox поддерживает Linux, Mac OS X и Windows.

Обратите внимание, что очень короткая идея выполнить любое действие (

2 голосов
/ 25 октября 2011

Опрос НЕ надежный / надежный.

Вы не можете определить, изменились ли данные (в любом случае в Windows), не вставив их в буфер для проверки. Это требует открытия буфера обмена. Если вы сделаете это в цикле, вы столкнетесь с другими приложениями. то есть приложение, в котором пользователь копирует другой элемент в буфер обмена. Это приведет к ошибке «Не удается открыть буфер обмена» или «Недостаточно памяти». Этот подход не будет работать надежно / надежно. Вам необходимо использовать соответствующие API мониторинга буфера обмена на различных платформах.

2 голосов
/ 25 октября 2011

Вы можете использовать инструментарий GUI, такой как Qt, чтобы получить API переносимого буфера обмена.Тем не менее, это может быть немного излишне использовать весь набор инструментов GUI только для этого.(Если, конечно, вы также не собираетесь использовать его для создания графического интерфейса.)

При этом API-интерфейсы буфера обмена, работающие с простым текстом, должны быть достаточно простыми, чтобы создать собственную абстракцию.

Например, в OS X вы можете использовать PyObjC (который устанавливается вместе с OS X), чтобы получить текстовое содержимое буфера обмена:

from AppKit import NSPasteboard
from LaunchServices import 
pb = NSPasteboard.generalPasteboard()
text = pb.stringForType_(kUTTypeUTF8PlainText)

Архитектура процессора

32-разрядное собственное приложение в 64-разрядной ОС будет иметь доступ к тому же буферу обмена, что и 64-разрядное.Если вам нужно поддерживать обе архитектуры ОС и не писать драйвер, для Windows все в порядке, если вы поставляете 32-битный двоичный файл;для Linux вам, вероятно, придется использовать обе версии;для OS X должно быть достаточно безопасно поставлять 64-битную версию, все Mac, начиная с середины 2007 года, имели 64-битные процессоры, и поддержка OS существует с Leopard.Сценарий Python в Linux, вероятно, будет выполняться установкой Python из диспетчера пакетов распространения, чья разрядность будет соответствовать системе, поэтому вам не нужно об этом беспокоиться.

...