Qt& Raspberry Pi获取终端命令的响应值

时间:2017-03-20 13:06:21

标签: c++ linux qt

我想读取板上CPU的温度(典型的命令" / opt / vc / bin / vcgencmd measure_temp"在Raspbian中)我可以在单击按钮时执行命令,但是我找不到在Qt程序中将结果保存到变量的方法。

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>

QProcess process;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QProcess lecturatemp;
lecturatemp.startDetached("/bin/sh",QStringList()<<"-c"<<"/opt/vc/bin/vcgencmd measure_temp"); //
//lecturatemp.waitForFinished();
}

1 个答案:

答案 0 :(得分:0)

根据documentation,QProcess是QIODevice的子类,因此您可以将返回值读取为文件,如下所示:

QByteArray result = lecturatemp.readAll();

如果您想要阅读流程的输出,则应阅读&#34; 通过渠道进行沟通&#34;段:

  

进程有两个预定义的输出通道:标准输出   channel(stdout)提供常规控制台输出和标准   错误通道(stderr)通常提供打印的错误   这个过程。这些通道代表两个独立的数据流。   您可以通过调用setReadChannel()在它们之间切换。另外,QProcess   当数据在当前读取通道上可用时,发出readyRead()。   当新的标准输出数据时,它还会发出readyReadStandardOutput()   可用,当有新的标准错误数据时,   发出readyReadStandardError()。而不是调用read(),   readLine()或getChar(),您可以显式读取其中的所有数据   通过调用readAllStandardOutput()或来调用两个通道   readAllStandardError()。

所以基本上调用以下内容,你应该得到输出:

QByteArray result = lecturatemp.readAllStandardOutput();
or
QByteArray result = lecturatemp.readAllStandardError();