2010-10-10 41 views

Respuesta

3

Favorezco una solución basada en Tkinter sobre una que requiera pygtk, simplemente por el potencial que tiene este último para los desafíos de instalación. Ante esto, mi recomendación a Alvin Smith es como sigue:

+0

El primer enlace está roto. –

1

solución basada en Tkinter mencionado en Cameron Laird's answer:

import Tkinter 
root = Tkinter.Tk() 
print(root.selection_get(selection="CLIPBOARD")) 

Sustituir "CLIP" con "PRIMARY" para obtener la selección PRIMARY en su lugar.

Ver también this answer.

solución pitón-xlib, basado en PrintSelection() y python-xlib/examples/get_selection.py

from Xlib import X, display as Xdisplay 

def property2str(display, prop): 
    if prop.property_type == display.get_atom("STRING"): 
     return prop.value.decode('ISO-8859-1') 
    elif prop.property_type == display.get_atom("UTF8_STRING"): 
     return prop.value.decode('UTF-8') 
    else: 
     return "".join(str(c) for c in prop.value) 

def get_selection(display, window, bufname, typename): 
    bufid = display.get_atom(bufname) 
    typeid = display.get_atom(typename) 
    propid = display.get_atom('XSEL_DATA') 
    incrid = display.get_atom('INCR') 

    window.change_attributes(event_mask = X.PropertyChangeMask) 
    window.convert_selection(bufid, typeid, propid, X.CurrentTime) 
    while True: 
     ev = display.next_event() 
     if ev.type == X.SelectionNotify and ev.selection == bufid: 
      break 

    if ev.property == X.NONE: 
     return None # request failed, e.g. owner can't convert to target format type 
    else: 
     prop = window.get_property(propid, X.AnyPropertyType, 0, 2**31-1, 1) 

     if prop.property_type == incrid: 
      result = "" 
      while True: 
       while True: 
        ev = display.next_event() 
        if ev.type == X.PropertyNotify and ev.atom == propid and ev.state == X.PropertyNewValue: 
         break 

       prop = window.get_property(propid, X.AnyPropertyType, 0, 2**31-1, 1) 
       if len(prop.value) == 0: 
        break 

       result += property2str(display, prop) 
      return result 
     else: 
      return property2str(display, prop) 

display = Xdisplay.Display() 
window = display.screen().root.create_window(0,0, 1,1, 0, X.CopyFromParent) 
print(get_selection(display, window, "CLIPBOARD", "UTF8_STRING") or \ 
     get_selection(display, window, "CLIPBOARD", "STRING")) 
0

Con el módulo de clipboard

En primer lugar, instale el módulo clipboard usando pip3:

$ sudo pip3 install clipboard 

Usando esta cruz módulo de plataforma (Linux, Mac, Windows) es bastante sencillo:

import clipboard 
clipboard.copy('text') # Copy to the clipboard. 
text = clipboard.paste() # Copy from the clipboard. 
Cuestiones relacionadas