Записать вывод команды в массив c++

Есть команда для консоли windows, которая выводит список всех установленных модулей(библиотек) для Python:введите сюда описание изображения

Как мне записать названия модулей, без версий в массив (где каждая ячейка - название одного модуля)? (нужно чтобы при этом не отображалась консоль). Например с помощью QProcess или popen() Подскажите как это делается?


Ответы (1 шт):

Автор решения: Sergey Tatarincev

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

    // У меня например вывод такой:
    QString output = "Package    Version\n"\
            "---------- -------\n"\
            "pip        19.2.3\n"\
            "PyQt5      5.14.1\n"\
            "PyQt5-sip  12.7.1\n"\
            "setuptools 41.2.0\n"\
            "WARNING: You are using pip version 19.2.3, however version 20.1 is available.\n"\
            "You should consider upgrading via the 'python -m pip install --upgrade pip' command.\n";
   // Очень удачно что у меня помимо самих модулей еще и лишний мусор в виде варнинга

    QMap<QString,QString> modules; // сюда соберем инфу о модулях
    foreach (QString str, output.split("\n")) { // разобъем вывод на строки и будем работать с каждой из них
        QStringList record = str.split(" ",QString::SkipEmptyParts); // строку разобъем по разделителю "пробел", пропуская "пустые" секции (т.е. пробелов разделителей может быть несколько)
        if(record.count()==2){ // у нас должно остаться две записи - название модуля и версия
            QRegExp re("(^[\\d|\\.]*$)"); // регулярка для проверки что строка "похожа" по виду на номер версии - в строке есть только цифры и точки
            if(re.indexIn(record.last())!=-1) // проверяем строку по регулярному выражению
                modules.insert(record.first(),record.last()); // если все норм - добавляем в карту инфу о модуле
        }
    }
    // тут просто выведем что у нас получилось
    qDebug()<<"so we have modules:";
    foreach (QString key, modules.keys()) {
        qDebug()<<"module: "<< key<<"version: "<< modules.value(key);

    }
→ Ссылка