2015-12-16 2 views
-1
#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QProcess> 
#include <QFile> 
#include <QDebug> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    FILE* file1 = popen ("make", "r"); 

    char buff[5122]; 

    while(fgets(buff, sizeof(buff), file1)!=NULL) 
    { 
     qDebug() << "from here: " << buff; 
    } 


    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral ("qrc:/main.qml"))); 
    return app.exec(); 
} 

С make командой выхода:POPEN не трап всех выходов команды

QML debugging is enabled. Only use this in a safe environment.
from here: make: Nothing to be done for first'.`

С ping командой выход:

QML debugging is enabled. Only use this in a safe environment. 
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface] 
      [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos] 
      [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] 
      [-w deadline] [-W timeout] [hop1 ...] destination 

Как вы можете видеть, с командой make выход был захвачен и отображен qDebug. Но это не относится к ping.

Будь то ошибка или что-то еще, я хочу, чтобы каждый вывод был захвачен и отображен через qDebug через мою программу.

Что мне теперь нужно делать?

ответ

5

В коде:

FILE* file1 = popen ("make", "r"); 

вы можете использовать любой оболочки команда полезна на машине. Например, вы можете перенаправить стандартную ошибку в том же направлении, что и стандартный вывод и захватить как через трубу:

FILE* file1 = popen ("make 2>&1", "r"); 

Дополнительная литература:

В то время как это технически возможно, чтобы открыть несколько труб к подпроцессу, это намного сложнее, чем однострочный вызов popen:

Смежные вопросы