April 22, 2019, 4:21 p.m.

Чтение из стрима результата выполнения команды

C++11

Всем привет.
Пытаюсь найти способ (только не Си) как получить выхлоп какой нибуть консольной команды. Например fdisk -l или uname -a
ВРоде как в стандарте что то есть для выполнения команд и чтения из стрима, но чет не могу найти. Сишный способ нашел, ужасно...
Спасибо.

Virtual hosting with 10 percent discount
Virtual hosting with 10 percent discount
EVILEG offers reliable hosting with a 10% discount for virtual hosting and 5% for VPS
5

Я вот так ping выводил
Может там что и лишнее :-)

void InfoObjectDialog::on_toolButtonPing_clicked()
{
    QProcess *ping = new QProcess(this);
    if(pingOFF) {
        QModelIndex idx = ui->tableViewRro->selectionModel()->currentIndex();
        QString ip = modelPC->data(modelPC->index(idx.row(),1)).toString();
        QString pingMess = QString("PING "+modelPC->data(modelPC->index(idx.row(),0)).toString()+" IP: "+ip);
        ui->labelPingINFO->setText(pingMess);
        pingOFF=false;
        ui->pingOutput->clear();
        ui->pingOutput->show();
        ui->labelPingINFO->show();
        ping->setProcessChannelMode(QProcess::MergedChannels);
        connect( ping, SIGNAL(readyReadStandardOutput ()), this, SLOT(print_ping()) );
#ifdef Q_OS_WIN
     ping->start("ping", QStringList() << "-t" <<ip);
#else
     ping->start("ping", QStringList() <<ip);
#endif
    } else {
        qDebug() << "Ping ID" << ping->pid();
        ping->terminate();

        ping->kill(ping->pid(), SIGINT);
        QProcess::execute(QString("kill -SIGINT %1").arg(ping->processId()));
        QProcess::execute(QString("taskkill /PID %1 /F").arg(ping->processId()));

#ifdef Q_OS_WIN
     PROCESS_INFORMATION *pinfo = (PROCESS_INFORMATION  *)ping->pid();
     QProcess::execute(QString("taskkill /PID %1 /F").arg(pinfo->dwProcessId));
#else
     QProcess::execute(QString("kill -SIGINT %1").arg(ping->pid()));
#endif
        pingOFF=true;
        ui->pingOutput->hide();
        ui->pingOutput->clear();
        ui->labelPingINFO->hide();

    }

}
0

Как я вижу вы изпользовали Qt методы. Из стандарта ничего не заюзали.
В принципе тоже вариант. МНе главное передать консольную каманду и перехватить весь стрим. Обработка того что получаю это уже другое дело)

0
  • April 23, 2019, 2:04 p.m.
  • The answer was marked as a solution.

В общем попробовал я чет такое

    QProcess process;

    QString lsblkMess;
    QString lsblkError;
    QByteArray byteArray;

    process.start("lsblk");

    if (process.waitForStarted(-1))
    {
        while(process.waitForReadyRead(-1))
        {
            byteArray = process.readAllStandardOutput();
            lsblkMess += byteArray.data();
        }
    }

и чет как то не проходит. массив данных пустой(

0

Вопрос закрыт) проблема найдена

1

я так понимаю надо инфорация об устройствах.
Я бы пробовал так

rust@suse:~> lsblk -P
NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="111,8G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="111,8G" RO="0" TYPE="part" MOUNTPOINT="/boot/grub2/i386-pc"
NAME="sdb" MAJ:MIN="8:16" RM="0" SIZE="465,8G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sdb1" MAJ:MIN="8:17" RM="0" SIZE="8M" RO="0" TYPE="part" MOUNTPOINT=""
NAME="sdb2" MAJ:MIN="8:18" RM="0" SIZE="462G" RO="0" TYPE="part" MOUNTPOINT="/home"
NAME="sdb3" MAJ:MIN="8:19" RM="0" SIZE="3,8G" RO="0" TYPE="part" MOUNTPOINT="[SWAP]"

и парсил бы вывод по строчно записывая в свой тип данных или модель

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
NM
July 20, 2019, 10:59 a.m.
Nikolaj Morozov

C++ - Test 001. The first program and data types

  • Result:73points,
  • Rating points1
AD
July 19, 2019, 9:51 a.m.
Anastasia Dutchina

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
AD
July 19, 2019, 9:46 a.m.
Anastasia Dutchina

Qt - Test 001. Signals and slots

  • Result:57points,
  • Rating points-2
Last comments
July 21, 2019, 6:03 a.m.
Evgenij Legotskoj

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные си...
July 20, 2019, 2:41 p.m.
Andrej Jankovich

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
July 20, 2019, 9:31 a.m.
Mihailll

Вот так qDebug()<<"position:"<<event->scenePos();
July 20, 2019, 8:49 a.m.
Mihailll

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Now discuss on the forum
July 21, 2019, 6:07 a.m.
Evgenij Legotskoj

Если вы про этот метод QRectF MoveItem::boundingRect() const{ return QRectF (-30,-30,60,60);} То мне нужно было, чтобы координата (0,0) была по центру квадрата в его локальной си...
July 20, 2019, 11:04 a.m.
Mihailll

Так и с ресурсами работает QImage image(":/Images/Images/1.png");
July 19, 2019, 10:55 a.m.
Mihailll

Да. Там похоже каждое устройство генерирует свой токен, этот токен нужно как то получать и использовать в запросе. Но как это делать я пока не понял.
July 19, 2019, 9:31 a.m.
Mihailll

Добрый день. Повернул ListView в горизонтальное положение. При прокрутке эллементы выстраиваются у левого края окна. Как в QMK в ListView сделать центрирование по центру? ...
b
July 18, 2019, 2:27 a.m.
bbb116

Когда отрисовки не видно, объекты AreaSelector создаются (при нажатии и движении мышкой), но почему то не срабатывает paint() у них, хотя делаю update этой области. Причем эти области мо...
Looking for a Job?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB