Is there a way to directly send a python output to clipboard?
You can use an external program, xsel
:
from subprocess import Popen, PIPEp = Popen(['xsel','-pi'], stdin=PIPE)p.communicate(input='Hello, World')
With xsel
, you can set the clipboard you want to work on.
-p
works with thePRIMARY
selection. That's the middle click one.-s
works with theSECONDARY
selection. I don't know if this is used anymore.-b
works with theCLIPBOARD
selection. That's yourCtrl + V
one.
Read more about X's clipboards here and here.
A quick and dirty function I created to handle this:
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 onlypaste('Hello', c=False) # pastes to PRIMARY onlypaste('Hello') # pastes to both
You can also try pyGTK's clipboard
:
import pygtkpygtk.require('2.0')import gtkclipboard = gtk.clipboard_get()clipboard.set_text('Hello, World')clipboard.store()
This works with the Ctrl + V
selection for me.
This is not really a Python question but a shell question. You already can send the output of a Python script (or any command) to the clipboard instead of standard out, by piping the output of the Python script into the xclip
command.
myscript.py | xclip
If xclip
is not already installed on your system (it isn't by default), this is how you get it:
sudo apt-get install xclip
If you wanted to do it directly from your Python script I guess you could shell out and run the xclip command using os.system()
which is simple but deprecated. There are a number of ways to do this (see the subprocess
module for the current official way). The command you'd want to execute is something like:
echo -n /path/goes/here | xclip
Bonus: Under Mac OS X, you can do the same thing by piping into pbcopy
.