¿Hay una manera de enviar directamente una salida de python al portapapeles?

Por ejemplo, si una secuencia de comandos de Python escupe una cadena que muestra la ruta de un archivo recién escrito que editaré inmediatamente después de ejecutar la secuencia de comandos, sería muy bueno que se envíe directamente al portapapeles del sistema en lugar de STDOUT .

Puedes usar un progtwig externo, xsel :

 from subprocess import Popen, PIPE p = Popen(['xsel','-pi'], stdin=PIPE) p.communicate(input='Hello, World') 

Con xsel , puede configurar el portapapeles en el que desea trabajar.

  • -p Trabaja con la selección PRIMARY . Ese es el clic del medio.
  • -s Trabaja con la selección SECONDARY . No sé si esto se usa más.
  • -b trabaja con la selección CLIPBOARD . Ese es tu Ctrl + V uno.

Lea más sobre los portapapeles de X aquí y aquí .

Una función rápida y sucia que creé para manejar esto:

 def paste(str, p=True, c=True): from subprocess import Popen, PIPE if p: p = Popen(['xsel', '-pi'], stdin=PIPE) p.communicate(input=str) if c: p = Popen(['xsel', '-bi'], stdin=PIPE) p.communicate(input=str) paste('Hello', False) # pastes to CLIPBOARD only paste('Hello', c=False) # pastes to PRIMARY only paste('Hello') # pastes to both 

También puedes probar el clipboard de pyGTK:

 import pygtk pygtk.require('2.0') import gtk clipboard = gtk.clipboard_get() clipboard.set_text('Hello, World') clipboard.store() 

Esto funciona con la selección de Ctrl + V para mí.

Esta no es realmente una pregunta de Python sino una pregunta de shell. Ya puede enviar la salida de una secuencia de comandos de Python (o cualquier comando) al portapapeles en lugar de la salida estándar, canalizando la salida de la secuencia de comandos de Python en el comando xclip .

 myscript.py | xclip 

Si xclip no está instalado en su sistema (no lo es por defecto), así es como lo obtiene:

 sudo apt-get install xclip 

Si quisiera hacerlo directamente desde su secuencia de comandos de Python, supongo que podría desembolsar y ejecutar el comando os.system() usando os.system() que es simple pero está obsoleto. Hay varias formas de hacerlo (consulte el módulo de subprocess de la forma oficial actual). El comando que desea ejecutar es algo como:

 echo -n /path/goes/here | xclip 

Bono: bajo Mac OS X, puede hacer lo mismo al pbcopy en pbcopy .

Como se publicó en otra respuesta , si desea resolverlo dentro de python, puede usar Pyperclip, que tiene el beneficio adicional de ser multiplataforma.

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

Como otros han señalado, esto no es “Python y baterías”, ya que involucra operaciones GUI. Así que depende de la plataforma. Si está en Windows, puede usar el módulo de Python win32 y acceder a las operaciones del portapapeles de win32. Sin embargo, mi sugerencia sería recoger un kit de herramientas GUI (PyQT / PySide para QT, PyGTK para GTK + o wxPython para wxWidgets). Luego usa las operaciones del portapapeles. Si no necesita los elementos pesados ​​de los kits de herramientas, haga su envoltura, que usará el paquete win32 en Windows y lo que esté disponible en otra plataforma, y ​​cambie según corresponda.

Para wxPython aquí hay algunos enlaces útiles:

http://www.wxpython.org/docs/api/wx.Clipboard-class.html

http://wiki.wxpython.org/ClipBoard

http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=25549