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

This question already has an answer here:

How do I copy a string to the clipboard on Windows using Python? 16 answers

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

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

 Junuxx16 июн. 2012 г., 14:44
Об этом много раз спрашивали. Ты пыталсяsearching for Python+Windows+clipboard?

Ответы на вопрос(11)

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()
 16 янв. 2019 г., 01:10
Если вы используетеQApplication.clipboard() вам не нужно импортироватьQClipboard.

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, в этом сценарии он назначается параметру, с которым вызывается сценарий.

On a fresh ubuntu 16.04 installation, I found that I had to install the python-gobject package for it to work without a module import error.

Еще один ответ для улучшения: 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()

Это витрины:

importing Tk across Py2 and Py3 raw_input and print() compatibility "unhiding" Tk root window when needed waiting for exit on Linux in two different ways.
 10 мая 2016 г., 14:45
@VickyDev - он был разработан на Ubuntu 14.04 LTS и работает. Пытатьсяsudo apt-get install python-tkКстати.
 10 мая 2016 г., 08:47
Это не работает на Ubuntu 14.04 LTS, пожалуйста, обновите ваш солутон для этого немедленно.

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 профиль & lt; 3

 16 февр. 2019 г., 18:03
Для меня это оставило кавычки в начале и конце строки, но удаление двух символов не было концом света
 11 янв. 2017 г., 04:26
Это для окон. Есть ли вариант для Ubuntu?
 11 янв. 2017 г., 18:44
Я сделал это с OSX

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)

 04 нояб. 2015 г., 15:11
@ TomaszGandor Спасибо за подсказку. Я отредактировал свой ответ, чтобы импортировать tkinter по ошибке.
 19 февр. 2015 г., 09:42
похоже, не работает из коробки с python3
 02 июн. 2017 г., 07:43
Вы пропустите одну строку в исходном ответе. Вам нужно поставить "r.update ()" позади "r.clipboard_append ()". В противном случае это не сработает.
 04 нояб. 2015 г., 14:06
@ChaseRoberts - о, давай! Вам нужно только исправить импорт вfrom tkinter import Tk, Пожалуйста, поблагодарите авторов Python 3 за их "чистку".
 04 нояб. 2015 г., 10:58
Обратите внимание: если вы работаете в Linux (или аналогичной, X11-подобной), процесс владельца буфера обмена должен быть запущен, чтобы вы могли вставить содержимое буфера обмена. Если у вас нет менеджера буфера обмена (например, Klipper или parcellite, есть десятки) - который делает буфер обмена Windows-подобным (постоянным).

Я пробую этот буфер обмена 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
 19 июл. 2016 г., 22:07
Не беспокойтесь об этом, он просто используетpyperclip, Используйте это вместо этого.
 02 июл. 2016 г., 22:35

Pyperclip кажется, до этой задачи.

#!/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()

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

Он скопирует «Привет, мир» в буфер обмена.

 11 сент. 2015 г., 16:59
Этот метод удаляет & apos; символы из текста
 18 июн. 2014 г., 13:42
Этот пример рано или поздно сломается; при неправильном использовании это может привести к огромным утечкам из-за безопасности, исполняя любой код, который должен быть скопирован в буфер обмена ... Существует намного больше способов передачи данных в стандартный поток процесса, чем вызов os.system (& quot; echo ... . ", как иsubprocess модуль ...
 26 февр. 2016 г., 00:27
Пользователь Windows может использовать команду clip вместо pbcopy.
 05 окт. 2016 г., 12:34
У меня не работает - буфер обмена имеет те же данные, Python 3.5.2
 25 мая 2014 г., 03:17
Что делать, если вы хотите скопировать строку, а не буквальный текст? Тогда что ты делаешь?

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

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

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

 24 окт. 2014 г., 22:59
@VincentTjeng обновлен
 28 сент. 2014 г., 20:20
Я попробовал это в моей системе, и .setcb не работает, но .copy работает. Я использую pyperclip 1.5.4 на py 2.7. На всякий случай, если у кого-то возникнут те же проблемы - и @robert, я бы хотел услышать, почему этот синтаксис работает в вашей системе, но не в моей.
 17 окт. 2014 г., 21:50
.copy, похоже, является официальным.github.com/asweigart/pyperclip

import subprocess

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

Тогда используйте:

copy2clip('This is on my clipboard!')

вызвать функцию.

 20 янв. 2019 г., 22:22
Кажется хорошим, но имеет дополнительный \ n '.
 16 дек. 2016 г., 20:28
CalledProcessError Traceback (последний вызов был последним) & lt; ipython-input-91-c0c14042eb28 & gt; в & lt; module & gt; () 4 cmd = "echo" + txt.strip () + "| clip" 5 return subprocess.check_call (cmd, shell = True) ---- & gt; 6 copy2clip ("Это в моем буфере обмена!") & Lt; ipython-input-91-c0c14042eb28 & gt; в copy2clip (txt) 3 def copy2clip (txt): 4 cmd = "echo" + txt.strip () + "| clip" ---- & GT; 5 return subprocess.check_call (cmd, shell = True) ... CalledProcessError: Command & apos; echo Это в моем буфере обмена! | Clip & apos; возвращен ненулевой статус выхода 127
 16 мая 2018 г., 21:25
это работает, но на окнах,clip это команда только для Windows (и иногда она не является частью системы, вам нужно скачать и установить ее вручную на WinXP)

Ваш ответ на вопрос