2010-04-10 2 views
3

Хорошо, ребята, я думаю, это легко, но я не могу найти, как скопировать строку. Просто КОПИРУЙТЕ системе, подобной CTRL + C, на текст.Копирование строки - Python

В принципе, я хочу скопировать строку, чтобы я мог, например, сказать, вставить (ctrl + v).

Извините за такой тривиальный вопрос, ха-ха.

+0

В зависимости от операционной системы Я бы предположил, что вы используете? – cobbal

+0

Windows, хотя я спрашиваю, что, если приложение должно было быть мультиплатформенным? Будет ли способ? – dpswt

+0

Подобный вопрос с кучей хороших ответов http://stackoverflow.com/questions/579687 –

ответ

2

Это сильно зависит от ОС. В Linux из-за странной модели выбора X самый простой способ - использовать popen('xsel -pi') и написать текст в этот канал.

Например: (я думаю)

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

Как было отмечено в комментариях, на Mac, вы можете использовать команду /usr/bin/pbcopy, как это:

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

Если вы хотите поддерживайте различные ОС, вы можете комбинировать различные решения с os.name, чтобы определить, какой метод использовать:

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... 
+2

на mac, сделайте то же самое, кроме '/ usr/bin/pbcopy' – cobbal

+0

Спасибо за ответы и комментарии! – dpswt

+0

@cobbal: Спасибо за это. :) –

4

Для Windows вы use win32clipboard. Вам понадобится pywin32.

Для GTK (по крайней мере, на GNU/Linux) вы можете use pygtk.

EDIT: Поскольку вы упомянули (немного поздно), вы используете wxPython, у них на самом деле есть модуль для этого тоже, wx.Clipboard.

+0

Что делать, если приложение должно быть многоплатформенным? Было бы возможно? – dpswt

+0

Я думаю, вам нужно будет протестировать платформу, а затем сделать один из описанных здесь методов. – cobbal

+0

GTK может работать в Windows, поэтому, скорее всего, (но непроверенный) вы можете использовать это на обеих платформах. См. Http://www.pygtk.org/downloads.html и http://www.gtk.org/download-windows.html#StableRelease –

2

Для Windows вы можете сделать this, и это намного проще, чем создание нового подпроцесса и т. Д. ...

2

Для многоплатформенного решения вам потребуется использовать межплатформенную инфраструктуру, такую ​​как wxPython или PyQt - они оба имеют поддержка чтения и записи в системный буфер обмена независимо от платформы.

+0

Ну, я на самом деле использую wxPython. – dpswt