Как на c++ в qt вывести результат из терминала

Модератор: Модераторы разделов

Ответить
gh777
Сообщения: 22

Как на c++ в qt вывести результат из терминала

Сообщение gh777 »

Как на c++ в qt gui вывести результат из терминала команды
watch -n 1 netstat -tuwapn
os ubuntu 16.04..
Хотя бы примерно, хотя бы в текстовый файл.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как на c++ в qt вывести результат из терминала

Сообщение NickLion »

Смотрите класс QProcess. Там есть методы и для чтения данных и для перенаправления в файл. Используйте, что больше подходит.

PS И да, watch тут лучше не использовать, а в самом Qt периодически запускать нужную команду.
Спасибо сказали:
gh777
Сообщения: 22

Re: Как на c++ в qt вывести результат из терминала

Сообщение gh777 »

А в какую переменную лучше писать в c++ qt результат команды netstat -tuwapn?
просто в файл то мне нужно, я просто думал как сформулировать вопрос..наверное просто в переменную,
но какого типа переменную лучше использовать в qt?

Нужно вывести в gui qt результат команды netstat -tuwapn, как это сделано в windows в файерволле agnitum outpost firewall..

Пишу программу network connections для ubuntu, нужно будет в qt gui выводить сетевые соединения.

QProcess proc;
proc.start("/bin/bash", QStringList() << "-c" << "netstat -tuwapn");

proc.waitForFinished();

QByteArray output = proc.readAll();
proc.close();
ui->textBrowser->setText(output);
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как на c++ в qt вывести результат из терминала

Сообщение NickLion »

1. Если это не решение на 5 минут (лаба или просто тест), то стоит ли завязываться на устаревшую программу netstat?
2. Всё равно не понял, нужно сохранить результат в файл или показать визуально в каком-то QPlainTextEdit?
3. Тип переменной для считывания определяется задачей.
3.1. Если нужно просто сохранить в файл, то переменной вообще не нужно, есть метод QProcess::setStandardOutputFile, позволяющий просто задать в какой файл записать результат.
3.2. Если нужно показать визуально, то в простейшем случае можно вызвать QProcess::readAllStandardOutput(), перекодировать в QString (QString::fromLocal8Bit) и установить в QPlaintTextEdit. Если данных много, то лучше в цикле считывать построчно (QProcess наследуется от QIODevice, QIODevice::readLine() → перекодировать и добавить в QPlainTextEdit).
Спасибо сказали:
gh777
Сообщения: 22

Re: Как на c++ в qt вывести результат из терминала

Сообщение gh777 »

NickLion писал(а):
04.07.2017 16:53
1. Если это не решение на 5 минут (лаба или просто тест), то стоит ли завязываться на устаревшую программу netstat?

Я знаю только эту команду, мне нужно получать список ВСЕХ сетевых соединений.

Не на 5 минут, хочу выложить программу на developers.ubuntu.com

NickLion писал(а):
04.07.2017 16:53
2. Всё равно не понял, нужно сохранить результат в файл или показать визуально в каком-то QPlainTextEdit?

Визуально, в белом прямоугольнике, так же как это сделано в agnitum outpost firewall на windows.
И по хорошему обновлять каждую секунду, чтобы был real time.
NickLion писал(а):
04.07.2017 16:53
3. Тип переменной для считывания определяется задачей.

Ну да, но я плохо знаю типы qt потому что последние несколько лет писал на php.
NickLion писал(а):
04.07.2017 16:53
3.1. Если нужно просто сохранить в файл, то переменной вообще не нужно, есть метод QProcess::setStandardOutputFile, позволяющий просто задать в какой файл записать результат.

Понял.
NickLion писал(а):
04.07.2017 16:53
3.2. Если нужно показать визуально, то в простейшем случае можно вызвать QProcess::readAllStandardOutput(), перекодировать в QString (QString::fromLocal8Bit) и установить в QPlaintTextEdit. Если данных много, то лучше в цикле считывать построчно (QProcess наследуется от QIODevice, QIODevice::readLine() → перекодировать и добавить в QPlainTextEdit).

.....
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как на c++ в qt вывести результат из терминала

Сообщение NickLion »

Условно, пишу здесь, без проверок:

Код: Выделить всё

QProcess p...;
...
QByteArray data = p.readAllStandardOutput();
QString s = QString::fromLocal8Bit(data);
ui->plainTextWidget->setPlainText(s);
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Как на c++ в qt вывести результат из терминала

Сообщение s.xbatob »

может, проще прочесть и разобрать /dev/net/tcp ?

Поправка: /proc/net/tcp
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как на c++ в qt вывести результат из терминала

Сообщение NickLion »

s.xbatob
У меня нет такого файла.
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Как на c++ в qt вывести результат из терминала

Сообщение s.xbatob »

NickLion писал(а):
08.07.2017 10:18
s.xbatob
У меня нет такого файла.

/proc/net/tcp
Спасибо сказали:
Ответить