Сценарий Python для копирования текста в буфер обмена

Мне просто нужен скрипт python, который копирует текст в буфер обмена.

После выполнения скрипта мне нужно, чтобы выведенный текст был вставлен в другой источник. Возможно ли написать скрипт python, который выполняет эту работу?

Комментарии к вопросу (2)

См. Pyperclip. Пример (взят с сайта Pyperclip):

import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')
spam = pyperclip.paste()

Также смотрите Xerox. Но у него, похоже, больше зависимостей.

Комментарии (4)

На mac я использую эту функцию.

import os 
data = "hello world"
os.system("echo '%s' | pbcopy" % data)

Она скопирует "hello world" в буфер обмена.

Комментарии (8)

Использовать Tkinter:

https://stackoverflow.com/a/4203897/2804197

try:
    from Tkinter import Tk
except ImportError:
    from tkinter import Tk
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()

(Автор: https://stackoverflow.com/users/449571/atomizer)

Комментарии (7)

Это единственный способ, который работал для меня, используя питон 3.5.2 плюс это'ы самый простой для реализации ж/ используя стандартныйPyData` люкс

Крик https://stackoverflow.com/users/4502363/gadi-oron за ответ (я полностью скопировал его) из https://stackoverflow.com/questions/579687/how-do-i-copy-a-string-to-the-clipboard-on-windows-using-python

import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)

Я написал небольшую обертку для него, что я положил в мой профиль оболочкой IPython в <3

Комментарии (8)

Pyperclip, похоже, справляется с этой задачей.

Комментарии (0)

Использовать родной питона каталоги, используйте:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|clip'
    return subprocess.check_call(cmd, shell=True)

на Mac, вместо:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|pbcopy'
    return subprocess.check_call(cmd, shell=True)

Затем использовать:

copy2clip('This is on my clipboard!')

для вызова функции.

Комментарии (5)

GTK3:

#!/usr/bin/python3

from gi.repository import Gtk, Gdk

class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text("hello world", -1)
        Gtk.main_quit()

def main():
    Hello()
    Gtk.main()

if __name__ == "__main__":
    main()
Комментарии (0)

PyQt5:

from PyQt5.QtWidgets import QApplication
from PyQt5 import QtGui
from PyQt5.QtGui import QClipboard
import sys

def main():

    app=QApplication(sys.argv)
    cb = QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Copy to ClipBoard", mode=cb.Clipboard)
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Комментарии (1)

Я попробовать этот буфер обмена 0.0.4 и он работает хорошо.

https://pypi.python.org/pypi/clipboard/0.0.4

import clipboard
clipboard.copy("abc")  # now the clipboard content will be string "abc"
text = clipboard.paste()  # text will have the content of clipboard
Комментарии (2)

Еще один ответ, чтобы улучшить: https://stackoverflow.com/a/4203897/2804197 и https://stackoverflow.com/a/25476462/1338797 (Tkinter).

Tkinter-это хорошо, потому что это'ы либо в комплекте с Python (для Windows) и простота установки (Linux), и таким образом требует меньшего зависимости для конечного пользователя.

Вот у меня на "полноценный" и пример, который копирует аргументы или стандартного потока ввода, в буфер обмена, и когда не на Windows - ждет, пока пользователь закрыть приложение:

import sys

try:
    from Tkinter import Tk
except ImportError:
    # welcome to Python3
    from tkinter import Tk
    raw_input = input

r = Tk()
r.withdraw()
r.clipboard_clear()

if len(sys.argv) < 2:
    data = sys.stdin.read()
else:
    data = ' '.join(sys.argv[1:])

r.clipboard_append(data)

if sys.platform != 'win32':
    if len(sys.argv) > 1:
        raw_input('Data was copied into clipboard. Paste and press ENTER to exit...')
    else:
        # stdin already read; use GUI to exit
        print('Data was copied into clipboard. Paste, then close popup to exit...')
        r.deiconify()
        r.mainloop()
else:
    r.destroy()

Это демонстрирует:

  • импорт ТК по Py2 и Py3
  • raw_input " и " печать() совместимость
  • то "разворачивать" в ТК корневое окно при необходимости
  • в ожидании выхода на Linux с двумя разными способами.
Комментарии (2)

Это измененная версия @Мартин Тома'ы ответ для GTK3. Я обнаружил, что оригинальное решение, в результате процесс никогда не заканчивается, и мой терминал висел, когда я назвал скрипт. Изменение сценария к следующим решен вопрос для меня.

#!/usr/bin/python3

from gi.repository import Gtk, Gdk
import sys
from time import sleep

class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()

        clipboardText = sys.argv[1]
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text(clipboardText, -1)
        clipboard.store()

def main():
    Hello()

if __name__ == "__main__":
    main()

Вы, вероятно, хотите изменить то, что clipboardText назначается, в этот сценарий она присваивается параметру, что скрипт вызывается.

На свежую Убунту установка 16.04, я обнаружил, что мне пришлось установить в Python-код, пакет для того, чтобы работать без ошибок импорта модуля.

Комментарии (0)