2009-12-01 16 views

risposta

7

Nuova risposta:

This page suggerisce:

Attuazione per Tutti Mac OS X versioni

l'altro modulo Mac (MacSharedClipboard.py, nel Listato 4) implementa l'interfaccia degli Appunti su primo di due comandi -line programmi chiamato pbcopy (che copia il testo in negli appunti) e pbpaste (che incolla qualunque testo sia negli appunti ). Il prefisso "pb" sta per "pasteboard", il termine Mac per gli appunti .

Vecchia risposta:

A quanto pare così:

http://code.activestate.com/recipes/410615/

è un semplice script che dimostra come farlo.

Modifica: Ho appena realizzato che questo si basa su Carbon, quindi potrebbe non essere l'ideale ... dipende un po 'da cosa lo stai usando.

+0

non ho mai pensato di usare uno strumento da riga di comando. Perfetto, grazie –

+0

Questo esempio di codice non gestisce correttamente le stringhe Unicode. Ho fornito una soluzione compatibile con Unicode come risposta separata. –

14

Il seguente utilizzare il codice PyObjC (http://pyobjc.sourceforge.net/)

from AppKit import NSPasteboard, NSArray 

pb = NSPasteboard.generalPasteboard() 
pb.clearContents() 
a = NSArray.arrayWithObject_("hello world") 
pb.writeObjects_(a) 

Come explained in Cocoa documentation, la copia richiede tre fasi:

  • ottenere il tavolo di montaggio
  • chiaro che
  • riempirlo

Si riempie il tavolo di montaggio con una matrice di oggetto (qui a contiene solo una stringa).

2

se si desidera semplicemente inserire il testo negli appunti Mac, è possibile utilizzare il comando pbcopy della shell.

+0

Se si tratta di un comando python super-short, è possibile reindirizzare l'output del comando a pbcopy in questo modo: python -c "print 'hi'" | pbcopy. Puoi anche includere una serie di comandi consecutivi: python -c 'import time, sys; sys.stdout.write (str (int (time.time()))) '| pbcopy. Questo copia il tempo di unix senza la nuova riga finale negli appunti. –

11

Un modo semplice:

cmd = 'echo %s | tr -d "\n" | pbcopy' % str 
os.system(cmd) 

Un modo cross-platform:
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() 
+3

Questo non sembra funzionare sul mio OS X 10.8. – Vojto

+1

Il blocco numero 1 probabilmente non funziona se il testo da scrivere negli appunti contiene caratteri Unicode o shell come | o &. Il blocco codice n. 2 crea un'icona dock aggiuntiva su OS X. Ho fornito la mia risposta a questa domanda che non presenta questi problemi. –

46

Come scrivere una stringa Unicode negli appunti di 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')) 

Come leggere una stringa Unicode dagli Appunti Mac:

import subprocess 

def read_from_clipboard(): 
    return subprocess.check_output(
     'pbpaste', env={'LANG': 'en_US.UTF-8'}).decode('utf-8') 

funziona sia su Python 2.7 e Python 3.4.

+1

non ho idea del motivo per cui questo diventa così poco amore, è di gran lunga il metodo più elegante e affidabile in questa pagina – zsero

+1

Perché grazie. Avevo bisogno di scrivere questa funzione per spingere il testo giapponese negli appunti, quindi ho dovuto farlo funzionare con Unicode. –

+0

Eccellente. Molto utile in una funzione di utilità per la pulizia di estratti da file pdf JSTOR; Grazie. – cphlewis

4

So che questo è un post più vecchio, ma ho trovato una soluzione molto elegante a questo problema.

C'è una libreria denominata PyClip, che può essere trovata a https://github.com/georgefs/pyclip-copycat.

La sintassi è abbastanza semplice (ad esempio dalla repo 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() 

una volta superato clipboard.copy('foo') si può solo cmd + v per ottenere il testo

Problemi correlati