Russian Qt Forum
Ноябрь 23, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как получить результат консольной команды top через QProcess  (Прочитано 10188 раз)
brwclc
Гость
« : Февраль 28, 2012, 11:05 »

Задача - считать данные, выдаваемые консольной командой "top" в линуксе, в массив QByteArray. Ниже привожу алгоритм. В результате returnData пустой. Почему не считываются данные с консоли? (Использовал этот алгоритм с другими командами - проблем нет, данные выдаются.)


Код:
QProcess* pConsoleProc = new QProcess;
QByteArray returnData;
QByteArray cmd = "top -n 1\n";

pConsoleProc->start("/bin/sh");

pConsoleProc->waitForStarted();
pConsoleProc->write(cmd);
pConsoleProc->waitForFinished();
pConsoleProc->waitForReadyRead();

returnData = pConsoleProc->readAllStandardOutput();

pConsoleProc->close();
delete pConsoleProc;
return returnData;
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Февраль 28, 2012, 11:08 »

Потому что top отрисовывает данные. Юзай ps.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mutineer
Гость
« Ответ #2 : Февраль 28, 2012, 11:10 »

А почему ты в старт отдаешь /bin/sh, а не сразу top (ну или ps, как советуют)?
Записан
brwclc
Гость
« Ответ #3 : Февраль 28, 2012, 11:13 »

Можно поподробней, что за "ps" ?
Записан
mutineer
Гость
« Ответ #4 : Февраль 28, 2012, 11:14 »

Можно поподробней, что за "ps" ?

можно. man ps в консоли
Записан
brwclc
Гость
« Ответ #5 : Февраль 28, 2012, 11:19 »

Понятно. Информация о процессах как раз мне и не нужна. Из top-а мне нужна информация о CPU, MEM и SWAP.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Февраль 28, 2012, 15:19 »

Понятно. Информация о процессах как раз мне и не нужна. Из top-а мне нужна информация о CPU, MEM и SWAP.
Мде... Про procfs похоже не слышал?
Тогда делай:
Код
Bash
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/swaps
Записан

Qt 5.11/4.8.7 (X11/Win)
brwclc
Гость
« Ответ #7 : Февраль 28, 2012, 22:05 »

Да да... Только вот "cat /proc/cpuinfo" - это общая информация о процессоре. Что не дает обновляемую информацию о его загруженности и работе.

Похоже, придется изучать исходники top... Грустный
Записан
brwclc
Гость
« Ответ #8 : Февраль 28, 2012, 22:09 »

Потому что top отрисовывает данные.

Кстати, "top -n 1 > top_log.txt"  тоже не отрабатывается купроцессом. В итоге пустой файл. Получается, не в прорисовке дело.
« Последнее редактирование: Февраль 28, 2012, 22:13 от brwclc » Записан
twp
Гость
« Ответ #9 : Февраль 28, 2012, 22:31 »

а какой код используется для запуска top?
Записан
BRE
Гость
« Ответ #10 : Февраль 28, 2012, 22:45 »

Кстати, "top -n 1 > top_log.txt"  тоже не отрабатывается купроцессом.
Так и должно быть.
Обработкой перенаправление пайпов (> top_log.txt) занимается шел, а его ты как раз не запускаешь. Да?
Записан
Rem Norton
Гость
« Ответ #11 : Февраль 28, 2012, 23:47 »

Да да... Только вот "cat /proc/cpuinfo" - это общая информация о процессоре. Что не дает обновляемую информацию о его загруженности и работе.

Похоже, придется изучать исходники top... Грустный
Не все так плохо. Может вот это как-то поможет.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Февраль 29, 2012, 14:51 »

Да да... Только вот "cat /proc/cpuinfo" - это общая информация о процессоре. Что не дает обновляемую информацию о его загруженности и работе.
А что посмотреть что находится в /proc не судьба?
К тому же сам проcил инфу о CPU.
Инфо о загрузке читается из /proc/loadavg либо берётся из getloadavg().

А вот читать вывод top-а, хм...
Записан

Qt 5.11/4.8.7 (X11/Win)
brwclc
Гость
« Ответ #13 : Февраль 29, 2012, 15:05 »

Цитировать
А что посмотреть что находится в /proc не судьба?
К тому же сам проcил инфу о CPU.
Инфо о загрузке читается из /proc/loadavg либо берётся из getloadavg().

А вот читать вывод top-а, хм...

/proc/loadavg
The  first  three  fields  in this file are load average figures
giving the number of jobs in the run queue (state R) or  waiting
 for disk I/O (state D) averaged over 1, 5, and 15 minutes.
// первые три поля - поля средней загрузки, показывающие число работ в рабочей очереди или ждущие ввода/вывода на диск, усредненные за 1, 5 и 15 минут.

И это информация о процессоре в реальном времени? Или Вы серьезно считаете, что я в /proc/ никогда в жизни не заглядвал?  Шокированный

Ладно, проблему временно решил sysstat-ом.
Записан
brwclc
Гость
« Ответ #14 : Февраль 29, 2012, 15:07 »

Кстати, "top -n 1 > top_log.txt"  тоже не отрабатывается купроцессом.
Так и должно быть.
Обработкой перенаправление пайпов (> top_log.txt) занимается шел, а его ты как раз не запускаешь. Да?

Запуск идет через bash
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 23.