Python peut-il envoyer du texte dans le presse-papier du Mac?
Question
J'aimerais que mon programme python place du texte dans le presse-papier du Mac.
Est-ce possible?
La solution
Nouvelle réponse:
Cette page suggère:
Mise en œuvre pour tous Mac OS X Versions
L'autre module Mac (MacSharedClipboard.py, dans le listing 4) implémente l'interface presse-papier sur haut de deux programmes en ligne de commande appelé pbcopy (qui copie le texte dans le presse-papiers) et pbpaste (qui colle le texte dans le texte presse-papier). Le préfixe " pb " représente " presse-papier, " le terme Mac pour presse-papiers.
Ancienne réponse:
Apparemment oui:
http://code.activestate.com/recipes/410615/
est un script simple montrant comment le faire.
Edit: Je viens de me rendre compte que cela dépend de Carbon, ce qui pourrait ne pas être idéal… dépend un peu de l'utilisation que vous en faites.
Autres conseils
Comment écrire une chaîne Unicode dans le presse-papier du Mac:
import subprocess
def write_to_clipboard(output):
process = subprocess.Popen(
'pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
process.communicate(output.encode('utf-8'))
Comment lire une chaîne Unicode dans le presse-papier du Mac:
import subprocess
def read_from_clipboard():
return subprocess.check_output(
'pbpaste', env={'LANG': 'en_US.UTF-8'}).decode('utf-8')
Fonctionne à la fois sur Python 2.7 et Python 3.4.
Le code suivant utilise PyObjC ( http://pyobjc.sourceforge.net/ )
from AppKit import NSPasteboard, NSArray
pb = NSPasteboard.generalPasteboard()
pb.clearContents()
a = NSArray.arrayWithObject_("hello world")
pb.writeObjects_(a)
As expliqué dans la documentation Cocoa , la copie nécessite trois étapes:
- récupérer le presse-papier
- effacez-le
- remplissez-le
Vous remplissez la table de travail avec un tableau d'objets (ici, un
ne contient qu'une chaîne).
Un moyen simple:
cmd = 'echo %s | tr -d "\n" | pbcopy' % str
os.system(cmd)
Une approche multiplateforme:
https://stackoverflow.com/a/4203897/805627
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.destroy()
Je sais que c’est un billet ancien, mais j’ai trouvé une solution très élégante à ce problème.
Il existe une bibliothèque appelée PyClip , accessible à l'adresse https: / /github.com/georgefs/pyclip-copycat .
La syntaxe est assez simple (exemple tiré du référentiel Github):
import clipboard
# copy some text to the clipboard
clipboard.copy('blah blah blah')
# get the text currently held in the clipboard
text = clipboard.paste()
une fois que vous avez passé clipboard.copy ('foo')
, vous pouvez simplement cmd + v pour obtenir le texte
si vous voulez simplement mettre du texte dans le presse-papier du Mac, vous pouvez utiliser la commande pbcopy du shell.