次のコードを使用して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!");
私が期待しているのは、デバッグコンソールに出力されたプログラムからの出力を表示することですが、表示されるのは次のとおりです。
できた!
そんなこと知ってる:
ここで何が悪いのですか?
プロセス呼び出しを開始する前に:
process.setProcessChannelMode(QProcess::MergedChannels);
これにより、すべて(STDERR出力を含む)がSTDOUT出力に出力されます。
ここにいくつかの説明があります:
http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum によれば、
QProcess::MergedChannels
:QProcess
は、実行中のプロセスの出力を標準出力チャネル(stdout)にマージします。 標準エラーチャネル(stderr)はデータを受信しません。[ ...]しかし
QProcess::ForwardedChannels
:QProcess
は、実行中のプロセスの出力をメインプロセスに転送します。 Anything子プロセスが標準出力に書き込み、標準エラーが標準出力と標準エラーに書き込まれますメインプロセス。