26

我以为我将使用以下代码从 QProcess 获取输出:

// Start the process
process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite);

// Wait for it to start
if(!process.waitForStarted())
    return 0;

// Continue reading the data until EOF reached
QByteArray data;

while(process.waitForReadyRead())
    data.append(process.readAll());

// Output the data
qDebug(data.data());
qDebug("Done!");

我期望看到程序的输出打印到调试控制台,但我看到的只是:

完毕!

我知道:

  • 程序启动正常,因为打印了最后的消息。
  • 该程序确实打印输出,因为在终端中运行完全相同的命令会产生预期的一长串文本。

我在这里做错了什么?

4

2 回答 2

29

在开始您的流程调用之前:

process.setProcessChannelMode(QProcess::MergedChannels);

它将导致将所有内容(甚至 STDERR 输出)打印到 STDOUT 输出。

于 2010-10-04T09:33:20.653 回答
12

这里有一些澄清:

根据http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum

  • QProcess::MergedChannelsQProcess将正在运行的进程的输出合并到标准输出通道(stdout)。标准错误通道(stderr)不会接收任何数据。[...]

  • QProcess::ForwardedChannels:QProcess将正在运行的进程的输出转发到主进程。子进程写入其标准输出和标准错误的任何内容都将写入主进程的标准输出和标准错误。
于 2015-01-30T15:36:39.947 回答