Вопрос Как скопировать stdout команды в буфер обмена в установке Ubuntu по умолчанию?


Я столкнулся с это вопрос, и я нашел это довольно интересным.

Во время исследования для этого я узнал, что решение уже было опубликовано Вот на AskUbuntu, плюс несколько раз StackOverflow и на Unix & Linux, но все предоставленные решения включали использование xclip или xsel, которые недоступны по умолчанию Ubuntu (т. е. они не присутствуют на Live DVD, например).

Вопрос: Как скопировать стандартный вывод команды в буфер обмена в установку Ubuntu по умолчанию?


1
2018-03-17 09:09


происхождения




ответы:


Скопируйте stdout в буфер обмена без установки дополнительного программного обеспечения

Хотя сначала это казалось невозможным (и это немного обход), это является вполне возможно без дополнительного программного обеспечения. Единственное, что нужно python, как он установлен из новой установки.

Это решение использует pythonспособность копировать текст в буфер обмена и сделать его доступным для других приложений, как объяснено (a.o.) Вот,

Конструкция

  • Первый шаг - создать пустой текстовый файл, скажем, terminal_log.txt
  • Команда (и), которые выполняются в терминале, сопровождается | tee /path/to/terminal_log.txt, например.

    pwd | tee /path/to/terminal_log.txt
    

    Выход будет в терминале, а также записан на terminal_log.txt

  • Между тем, сценарий (см. Ниже) работает в фоновом режиме, обнаруживая изменения в файле
  • Если файл изменен, изменение будет скопировано в буфер обмена

Результат приведенного выше примера:

pwd | tee /path/to/terminal_log.txt

Если я открою gedit и нажмите Ctrl+В

/home/jacob/Desktop

Как настроить

  1. создать пустой (log-) файл, terminal_log.txt
  2. Скопируйте сценарий ниже в пустой файл. В разделе «Голова» задайте путь к terminal_log.txt, сохраните его как read_output.py
  3. Запустите скрипт с помощью команды

    python /path/to/read_output.py
    
  4. Запустите в (другой) терминал свою команду, а затем:

    | tee /path/to/terminal_log.txt

  5. Вывод вашей команды копируется в буфер обмена

Если вы часто используете его, вы можете запустить его как приложение для запуска.

Сценарий

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import time

#--- enter the path to the log file below
f = "/path/to/terminal_log.txt"
#---

output1 = open(f).read().strip()

while True:
    time.sleep(1)
    output2 = open(f).read().strip()
    if output1 != output2:
        tx = output2.replace(output1, "")
        clipboard = gtk.clipboard_get()
        clipboard.set_text(tx)
        clipboard.store()
    output1 = output2



Дополнительная информация

command | tee /path/to/terminal_log.txt

Не копирует stderr в буфер обмена. Чтобы скопировать оба stdout а также stderr в буфер обмена, используйте:

command > >(tee /path/to/terminal_log.txt) 2> >(tee /path/to/terminal_log.txt >&2)

как объяснено Вот


2
2018-03-20 15:51



Хороший ответ и +1 для использования Python! Благодаря! - kos
На самом деле это было для меня неожиданностью :) - Jacob Vlijm