Есть ли способ напрямую отправить вывод python в буфер обмена?

Например, если python script выплюнет строку, дающую путь к новому записанному файлу, который я буду редактировать сразу после запуска script, было бы очень приятно, чтобы он был отправлен напрямую в системный буфер обмена, а не STDOUT.

Ответы

Ответ 1

Вы можете использовать внешнюю программу, xsel:

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

С помощью xsel вы можете настроить буфер обмена, над которым хотите работать.

  • -p работает с выбором PRIMARY. Это средний щелчок.
  • -s работает с выбором SECONDARY. Я не знаю, используется ли это больше.
  • -b работает с выбором CLIPBOARD. Это ваш Ctrl + V один.

Подробнее о X-буферах здесь и здесь.

Быстрая и грязная функция, которую я создал для этого:

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

Вы также можете попробовать pyGTK CLIPBOARD:

import pygtk
pygtk.require('2.0')
import gtk

clipboard = gtk.clipboard_get()

clipboard.set_text('Hello, World')
clipboard.store()

Это работает с выбором Ctrl + V для меня.

Ответ 2

Это не вопрос Python, а вопрос оболочки. Вы уже можете отправить вывод Python script (или любой команды) в буфер обмена вместо стандартного вывода, передав вывод Python script в команду xclip.

myscript.py | xclip

Если xclip еще не установлено в вашей системе (это не по умолчанию), вот как вы его получите:

sudo apt-get install xclip

Если вы хотите сделать это прямо с вашего Python script, я предполагаю, что вы можете выложить и запустить команду xclip с помощью os.system(), которая проста, но не рекомендуется. Существует несколько способов сделать это (см. Модуль subprocess для текущего официального пути). Команда, которую вы хотите выполнить, выглядит примерно так:

echo -n /path/goes/here | xclip

Бонус: в Mac OS X вы можете сделать то же самое, подключившись к pbcopy.

Ответ 3

Как было опубликовано в другом , если вы хотите решить это в python, вы можете использовать Pyperclip, который имеет дополнительное преимущество в том, чтобы быть кросс-платформенным.

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

Ответ 4

Как отмечали другие, это не "Python и батареи", поскольку он включает в себя операции с графическим интерфейсом. Так что это зависит от платформы. Если вы находитесь в окнах, вы можете использовать win32 Python Module и Access win32 clipboard. Мое предложение, однако, будет собирать один инструментарий GUI (PyQT/PySide для QT, PyGTK для GTK + или wxPython для wxWidgets). Затем используйте операции с буфером обмена. Если вам не нужны тяжелые вещи из наборов инструментов, сделайте свою упаковку, которая будет использовать пакет win32 для окон и все, что доступно на другой платформе, и соответственно переключитесь!

Для wxPython вот несколько полезных ссылок:

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