我以为我将使用以下代码从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!");
我期待的是看到程序的输出打印到调试控制台,但我看到的只有:
完成!
我知道:
我在这里做错了什么?
答案 0 :(得分:27)
在开始您的流程调用之前:
process.setProcessChannelMode(QProcess::MergedChannels);
它会导致所有内容(甚至是STDERR输出)打印到STDOUT输出。
答案 1 :(得分:10)
以下是一些澄清:
根据http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum,
QProcess::MergedChannels
:QProcess
将正在运行的进程的输出合并到标准输出通道(stdout)中。 标准错误频道(stderr)不会接收任何数据。[...] 但
QProcess::ForwardedChannels
:QProcess
将正在运行的进程的输出转发到主进程。 任何子进程写入其标准输出,标准错误将写入主进程的标准输出和标准错误。