Pythonscript om tekst naar het klembord te kopiëren

Ik heb alleen een pythonscript nodig dat tekst naar het klembord kopieert.

Nadat het script is uitgevoerd, moet ik de uitvoer van de tekst in een andere bron plakken.
Is het mogelijk om een python-script te schrijven dat dit werk doet?


Antwoord 1, autoriteit 100%

Zie Pyperclip. Voorbeeld (overgenomen van de Pyperclip-site):

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

Zie ook Xerox. Maar het lijkt meer afhankelijkheden te hebben.


Antwoord 2, autoriteit 35%

Gebruik op macOS subprocess.runom uw tekst door te sturen naar pbcopy:

import subprocess 
data = "hello world"
subprocess.run("pbcopy", universal_newlines=True, input=data)

Het kopieert “hallo wereld” naar het klembord.


Antwoord 3, autoriteit 19%

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

(Oorspronkelijke auteur: https://stackoverflow.com/users/449571/atomizer)


Antwoord 4, autoriteit 13%

Dit is de enige manier die voor mij werkte met behulp van Python 3.5.2plus het is het gemakkelijkst te implementeren met de standaard PyDatasuite

Shout out naar https://stackoverflow.com/users/4502363/gadi-oronvoor het antwoord (Ik heb het volledig gekopieerd) van Hoe kopieer ik een string naar het klembord in Windows met Python?

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

Ik heb er een kleine wrapper voor geschreven die ik in mijn ipython-profiel <3

plaatste


Antwoord 5, autoriteit 8%

Om native Python-mappen te gebruiken, gebruik je:

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

op Mac, in plaats daarvan:

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

Gebruik vervolgens:

copy2clip('This is on my clipboard!')

om de functie aan te roepen.


Antwoord 6, autoriteit 7%

Pypercliplijkt te voldoen de taak.


Antwoord 7, autoriteit 3%

PyQt5:

from PyQt5.QtWidgets import QApplication
import sys
def main():
    app = QApplication(sys.argv)
    cb = QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Copy to ClipBoard", mode=cb.Clipboard)
    # Text is now already in the clipboard, no need for further actions.
    sys.exit()
if __name__ == "__main__":
    main()

Antwoord 8, autoriteit 2%

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

Antwoord 9

Nog een antwoord om te verbeteren:
https://stackoverflow.com/a/4203897/2804197
en https://stackoverflow.com/a/25476462/1338797(Tkinter).

Tkinter is leuk, omdat het ofwel wordt meegeleverd met Python (Windows) of eenvoudig te installeren is (Linux), en dus weinig afhankelijkheden vereist voor de eindgebruiker.

Hier heb ik een “volledig” voorbeeld, dat de argumenten of de standaardinvoer kopieert naar het klembord, en – wanneer niet op Windows – wacht tot de gebruiker de toepassing sluit:

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

Dit toont:

  • Tk importeren in Py2 en Py3
  • raw_inputen print()compatibiliteit
  • “unhiding” Tk root-venster wanneer nodig
  • op twee verschillende manieren wachten op afsluiten onder Linux.

Antwoord 10

Dit is een gewijzigde versie van het antwoord van @Martin Thoma voor GTK3. Ik ontdekte dat de originele oplossing ertoe leidde dat het proces nooit eindigde en dat mijn terminal vastliep toen ik het script aanriep. Het wijzigen van het script naar het volgende loste het probleem voor mij op.

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

U zult waarschijnlijk willen wijzigen waaraan clipboardText wordt toegewezen, in dit script wordt het toegewezen aan de parameter waarmee het script wordt aangeroepen.

Bij een nieuwe installatie van ubuntu 16.04 ontdekte ik dat ik het pakket python-gobjectmoest installeren om het te laten werken zonder een module-importfout.


Antwoord 11

Ik probeer dit klembord 0.0.4 en het werkt goed.

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

Other episodes