【问题标题】:How to get the returned stdout of a program called with QProcess?如何获取使用 QProcess 调用的程序的返回标准输出?
【发布时间】:2015-09-23 01:08:04
【问题描述】:

我正在用 Qt 编写一个程序,目前正在使用 popen 运行一个 linux 命令并将输出读入一个字符串:

    QString Test::popenCmd(const QString command) {
    FILE *filePointer;
    int status;
    int maxLength = 1024;
    char resultStringBuffer[maxLength];
    QString resultString = "";

    filePointer = popen(command.toStdString().c_str(), "r");
    if (filePointer == NULL) {
        return 0;
    }

    while (fgets(resultStringBuffer, maxLength, filePointer) != NULL) {
        resultString += resultStringBuffer;
    }
    status = pclose(filePointer);
    if (status == 0) {
        return resultString;
    } else {
        return 0;
    }
}

所以我想放弃上面的代码,因为如果可能的话,我更愿意使用 Qt 提供的更高级别的工具。有没有人有一个如何使用 QProcess 做到这一点的例子,或者至少有一个大概的想法?

不管怎样,这将在 Linux 上运行。

谢谢

【问题讨论】:

标签: c++ linux qt popen qprocess


【解决方案1】:

这样做:

void Process::runCommand(const QString &p_Command) {
    QProcess *console = new QProcess();
    console->connect(console, SIGNAL(readyRead()), this, SLOT(out()));
    console->connect(console, SIGNAL(finished(int)), this, SLOT(processFinished(int)));
    console->start(p_Command);
}

void Process::out() {
    QProcess *console = qobject_cast<QProcess*>(QObject::sender());
    QByteArray processOutput = console->readAll();
}

void Process::processFinished(int p_Code) {
    QProcess *console = qobject_cast<QProcess*>(QObject::sender());
    QByteArray processOutput = console->readAll() + QString("Finished with code %1").arg(p_Code).toLatin1();
}

信号QProcess::finished()可以用来获取进程的退出码。

【讨论】:

    最近更新 更多