Потому что образец «htop» меня интересует, вот подсказка.
htop - это «интерактивное» приложение терминала (с использованием проклятий для «рисования» анимированного изображения терминала), в отличие от стандартного фильтра UNIX-стиля (который принимает входные данные из файлового источника , и обеспечивает последовательный выходной поток для любого файлоподобного адресата).
Так что не так легко «захватить» его вживую. Фактически единственный класс приложений, который поддерживает это, называется terminal emulator
. Давайте использовать tmux
в качестве эмулятора терминала, который способен записывать «скриншоты» в файл.
$ SESS_ID=$(uuidgen)
$ COLUMNS=80 LINES=25 tmux new-session -s "$SESS_ID" -d htop
Это начинает новый сеанс, работающий на фоне htop. Мы создали уникальный идентификатор, чтобы мы могли контролировать его, не мешая другим сеансам tmux. Вы можете перечислить его, чтобы проверить, что имя:
$ tmux list-sessions
a9946cbf-9863-4ac1-a063-02724e580f88: 1 windows (created Wed Dec 14 21:10:42 2016) [170x42]
Теперь вы можете использовать capture-pane
, чтобы получить содержимое этого окна:
$ tmux capture-pane -t "$SESS_ID" -p
На самом деле, запустить его несколько раз дает вам (монохромный) (каждые 2 секунды, по умолчанию):
$ watch tmux capture-pane -t "$SESS_ID" -p
Теперь. Конечно, вы хотите цвета. Использовать ansifilter
:
$ tmux capture-pane -t "$SESS_ID" -p -e | ansifilter -H > shot.html
Voila. Я уверен, что у Qt есть хороший виджет для отображения содержимого HTML. Я проверил это работает этот
$ while sleep 1; do tmux capture-pane -t "$SESS_ID" -p -e | ansifilter -H > shot.html; done
И открытие shot.html
в моем браузере. Каждый раз, когда я перезагрузки, я получаю последнюю дату скриншот:
О, PS, когда вы закончите очистку этой сессии с использованием
$ tmux kill-session -t "$SESS_ID"
Чтение документации загнутыми [это ] (http://doc.qt.io/qt-5/qprocess.html#readAllStandardOutput). Так что делать это в цикле, вероятно, вы получите там ... – StoryTeller
Я тестировал его в отладчике Qt, но я не получаю никакого вывода. Вывод массива пуст. – tomsk
Вы называли это более одного раза? Выполняющий процесс должен генерировать вывод для чтения, прежде чем вы сможете его прочитать. Это означает, что он должен быть запущен в первый раз – StoryTeller