Qt Linux下獲取系統信息

Qt Linux下獲取系統信息

由於QOperatingSystemVersion在linux系統下無效,所以我們需要重新實現下一些功能,比如系統版本、CPU、GPU信息等。我們使用linux下的shell來獲取各種信息。

起初,我使用QProcess執行多條管道指令,例如

QString cmd = "cat file | grep string";
QProcess process;
process->start("cat file | grep string");
process->waitForFinished();
qDebug() << process->readAll();

這樣是不行的,QProcess執行的是一個外部可執行文件,不能執行系統指令,這條指令有cat、grep兩條通過管道輸出的。我們可以把參數傳遞給bash來執行:

process.start(“bash”, QStringList() << “-c” << “cat file | grep string”);

或者添加引號:

process->start("/bin/sh -c “cat file | grep string”");

接下來我們就可以正常執行我們的指令了。

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess process;
    process.start("/bin/bash", QStringList() << "-c" << "cat /etc/redhat-release");
    process.waitForFinished();
    QString output = process.readAllStandardOutput().trimmed();
    qDebug() << output;

    process.start("/bin/bash", QStringList() << "-c" << "cat /proc/cpuinfo | grep 'model name' | uniq | awk -F':' '{print $2}'");
    process.waitForFinished();
    output = process.readAllStandardOutput().trimmed();
    qDebug() << output;


    process.start("/bin/bash", QStringList() << "-c" << "uname -a");
    process.waitForFinished();
    output = process.readAllStandardOutput().trimmed();
    qDebug() << output;

    process.start("/bin/bash", QStringList() << "-c" << "cat /proc/version");
    process.waitForFinished();
    output = process.readAll().trimmed();
    qDebug() << output;

    process.start("/bin/bash", QStringList() << "-c" << "lspci | grep -i vga | awk -F':' '{print $3}'");
    process.waitForFinished();
    output = process.readAll().trimmed();
    qDebug() << output;


    process.start(R"(/bin/bash -c "cat /etc/redhat-release")");
    process.waitForFinished();
    output = process.readAllStandardOutput().trimmed();
    qDebug() << output;

    return a.exec();
}

執行結果如下:

"CentOS Linux release 7.6.1810 (Core)"
"Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz"
"Linux localhost.localdomain 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux"
"Linux version 3.10.0-957.21.3.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Tue Jun 18 16:35:19 UTC 2019"
"VMware SVGA II Adapter"
"CentOS Linux release 7.6.1810 (Core)"

附上一條獲取CPU信息的命令:

cat /proc/cpuinfo |
awk -v FS=’:’ ’
/^physical id/ { if(nb_cpu<$2) { nb_cpu=$2 } }
/^cpu cores/ { if(nb_cores<$2){ nb_cores=$2 } }
/^processor/ { if(nb_units<$2){ nb_units=$2 } }
/^model name/ { model=$2 }

END{
nb_cpu=(nb_cpu+1);
nb_units=(nb_units+1);

print “CPU model:”,model;
print nb_cpu,“CPU,”,nb_cores,“physical cores per CPU, total”,nb_units,“logical CPU units”
}’

參考引用

Interpreting output of cat/proc/cpuinfo
Piping (or command chaining) with QProcess

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章