Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

fooobar.com/questions/42995/...

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)

Ответ 4

Pyperclip, похоже, соответствует задаче.

Ответ 5

Чтобы использовать собственные каталоги Python, используйте:

import subprocess

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

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

copy2clip('This is on my clipboard!')

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

Ответ 6

Это единственный способ, который работал у меня с помощью Python 3.5.2 плюс его проще всего реализовать с использованием стандартного пакета PyData

Открой https://stackoverflow.com/users/4502363/gadi-oron ответ (я полностью его скопировал) из Как скопировать строку в буфер обмена в Windows с использованием Python?

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

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

Ответ 7

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

Ответ 8

Я пытаюсь использовать этот буфер обмена 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

Ответ 9

Еще один ответ для улучшения: fooobar.com/questions/42995/... и fooobar.com/questions/112248/... (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()

Эти витрины:

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

Ответ 10

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

Ответ 11

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

#!/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, в этом script он назначен параметру, вызываемому с помощью script.

В новой установке ubuntu 16.04 я обнаружил, что мне пришлось установить пакет python-gobject, чтобы он работал без ошибки импорта модуля.