views:

284

answers:

4

Ok guys I imagine this is easy but I can't seem to find how to copy a string. Simply COPY to the system like CTRL+C on a text.

Basically I want to copy a string so I can for example, lets say, paste(ctrl+v).

Sorry for such a trivial question, haha.

+4  A: 

For Windows, you use win32clipboard. You will need pywin32.

For GTK (at least on GNU/Linux), you can use pygtk.

EDIT: Since you mentioned (a bit late) you're using wxPython, they actually have a module for this too, wx.Clipboard.

Matthew Flaschen
What if, the application was supposed to be multi-platform? Would it be possible?
Francisco Aleixo
I think you would have to test for platform and then do one of the methods mentioned here
cobbal
GTK can run on Windows, so it's likely (but untested) you can use that on both platforms. See http://www.pygtk.org/downloads.html and http://www.gtk.org/download-windows.html#StableRelease
Matthew Flaschen
Oh, ok. Thanks for all your help
Francisco Aleixo
+2  A: 

This depends a lot on the OS. On Linux, due to X's bizarre selection model, the easiest way is to use popen('xsel -pi'), and write the text to that pipe.

For example: (I think)

def select_xsel(text):
    import subprocess
    xsel_proc = subprocess.Popen(['xsel', '-pi'], stdin=subprocess.PIPE)
    xsel_proc.communicate(some_text)

As pointed out in the comments, on a Mac, you can use the /usr/bin/pbcopy command, like this:

xsel_proc = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)

If you want to support different OSes, you could combine different solutions with os.name to determine which method to use:

import os, subprocess
def select_text(text):
    if os.name == "posix":
        # try Mac first
        try:
            xsel_proc = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)
        except:
            # try Linux version
            xsel_proc = subprocess.Popen(['xsel', '-pi'], stdin=subprocess.PIPE)
    elif os.name == "nt":
        # Windows...
Lucas Jones
on mac, do the same thing except with `/usr/bin/pbcopy`
cobbal
Francisco Aleixo
@cobbal: Thanks for that. :)
Lucas Jones
+2  A: 

For Windows, you can do this and it's much easier than creating a new subprocess etc...

inspectorG4dget
+3  A: 

For a multi-platform solution you will need to use a cross-platform framework like wxPython or PyQt - they both have support for reading and writing to the system clipboard in a platform independent way.

Dave Kirby
Well ye I'm actually using wxPython.
Francisco Aleixo