代码之家  ›  专栏  ›  技术社区  ›  Nathan Osman

如何从QProcess获取STDOUT?

  •  23
  • Nathan Osman  · 技术社区  · 15 年前

    我想我将使用以下代码从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!");
    

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

    完成!

    我知道:

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

    2 回复  |  直到 15 年前
        1
  •  28
  •   Azeem Rob Hyndman    7 年前

    在开始进程调用之前:

    process.setProcessChannelMode(QProcess::MergedChannels);
    

        2
  •  10
  •   Azeem Rob Hyndman    7 年前

    以下是一些澄清:

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

    • QProcess::MergedChannels QProcess 将正在运行的进程的输出合并到标准输出通道(stdout)中。 标准误差 信道(标准) 不会

    • QProcess::ForwardedChannels : Q过程 将正在运行的进程的输出转发到主进程。 子进程写入其标准输出和标准错误 将写入标准输出和标准错误