QProcess没有从命令中读取结果

Posted

技术标签:

【中文标题】QProcess没有从命令中读取结果【英文标题】:QProcess not reading result from command 【发布时间】:2020-01-05 14:54:48 【问题描述】:

我正在尝试使用 QProcess 在 Qt 中运行一些 llvm 命令:

    QProcess* compile = new QProcess();
    compile->setWorkingDirectory("/Users/xxx/Documents/");

    compile->start("clang-check test.cpp -ast-dump -ast-dump-filter=main --"); 
//  compile->start("clang -Xclang -ast-dump test.cpp");

    compile->waitForFinished(-1);

    qDebug() << compile->readAll() << endl;
    qDebug() << compile->readAllStandardOutput() << endl;
    qDebug() << compile->readAllStandardError() << endl;

虽然带有clang-check 的第一个启动命令不会输出任何结果,但带有clang 的第二个命令会输出预期的结果。我想知道什么会导致这样的问题?而且我已经确保通过直接输入它们都可以工作的命令。

谢谢!

【问题讨论】:

你说的有点奇怪,我确实有办法。 【参考方案1】:

我已经遇到过这个问题,尝试连接QProcess::readyReadStandardOutputQProcess::readyReadStandardError,而不是处理插槽中的输出:

connect(&compile, &QProcess::readyReadStandardOutput, this, [this]() 
    qDebug() << "Std output:" << compile->readAllStandardOutput();
);

connect(&compile, &QProcess::readyReadStandardError, this, [this]() 
    qDebug() << "Err output:" << compile->readAllStandardError();
);

另外,检查进程是否以QProcess::waitForStarted() 正确启动。

旁注:检查可能导致内存泄漏的new QProcess

【讨论】:

以上是关于QProcess没有从命令中读取结果的主要内容,如果未能解决你的问题,请参考以下文章

Qt QProcess::finished() 信号没有这样的插槽

PyQt:多个 QProcess 和输出

QProcess -> 在 Linux 上从 sftp 读取标准输出

使用 QProcess 读取标准输出

如何在 Linux unsing QProcess 下执行 shell 命令?

我如何从 QProcess 中读取数据?