web-dev-qa-db-fra.com

Python pour copier du texte dans le presse-papiers)

J'ai juste besoin d'un script python) qui copie le texte dans le presse-papier.

Une fois le script exécuté, j'ai besoin que la sortie du texte soit collée dans une autre source. Est-il possible d'écrire un script python qui fait ce travail?)

92
iamsiva11

Voir Pyperclip . Exemple (tiré du site Pyperclip):

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

Voir aussi Xerox . Mais il semble avoir plus de dépendances.

125
robert

Sur mac j'utilise cette fonction.

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

Il copiera "bonjour le monde" dans le presse-papiers.

36
kyle k

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

(Auteur original: https://stackoverflow.com/users/449571/atomizer )

34
user2804197

C’est la seule façon qui a fonctionné pour moi en utilisant Python 3.5.2 plus il est plus facile à implémenter avec la suite standard PyData

Crier à https://stackoverflow.com/users/4502363/gadi-oron pour la réponse (je l'ai copiée complètement) à partir de comment copier une chaîne dans le presse-papiers sous Windows en utilisant Python?

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

J'ai écrit un petit wrapper pour cela que j'ai mis dans mon profil ipython <3

14
O.rka

Pyperclip semble être à la hauteur de la tâche.

13
ev-br

Pour utiliser les répertoires natifs Python, utilisez:

import subprocess

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

Alors utilisez:

copy2clip('This is on my clipboard!')

appeler la fonction.

9
Binyamin

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 __== "__main__":
    main()
4
Martin Thoma

Encore une réponse à améliorer sur: https://stackoverflow.com/a/4203897/2804197 et https://stackoverflow.com/a/25476462/1338797 (Tkinter ).

Tkinter est agréable, car il est inclus avec Python (Windows) ou facile à installer (Linux), et nécessite donc peu de dépendances pour l'utilisateur final.

J'ai ici un exemple "complet", qui copie les arguments ou l'entrée standard dans le presse-papiers et, lorsqu'il n'est pas sous Windows, attend que l'utilisateur ferme l'application:

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

Cette vitrines:

  • importer Tk à travers Py2 et Py3
  • Compatibilité raw_input Et print()
  • "dévoiler" la fenêtre racine Tk en cas de besoin
  • en attente de sortie sur Linux de deux manières différentes.
2
Tomasz Gandor

J'essaie ce presse-papiers 0.0.4 et cela fonctionne bien.

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
Du Peng

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 __== "__main__":
    main()
2
Akshay

Ceci est une version altérée de la réponse de @Martin Thoma pour GTK. J'ai constaté que la solution d'origine aboutissait à un processus sans fin et que mon terminal était bloqué lorsque j'ai appelé le script. Changer le script comme suit a résolu le problème pour moi.

#!/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 __== "__main__":
    main()

Vous voudrez probablement changer le contenu de clipboardText, dans ce script, il est assigné au paramètre avec lequel le script est appelé.

Sur une nouvelle installation d'ubuntu 16.04, j'ai découvert que je devais installer le python-gobject package pour qu'il fonctionne sans erreur d'importation de module.

1
Programster