Есть ли способ напрямую отправить вывод 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