2015-09-23 32 views
1

我写在Qt的程序和当前使用POPEN运行Linux命令和读取输出到一个字符串:如何获取使用QProcess调用的程序的返回stdout?

QString Test::popenCmd(const QString command) { 
    FILE *filePointer; 
    int status; 
    int maxLength = 1024; 
    char resultStringBuffer[maxLength]; 
    QString resultString = ""; 

    filePointer = popen(command.toStdString().c_str(), "r"); 
    if (filePointer == NULL) { 
     return 0; 
    } 

    while (fgets(resultStringBuffer, maxLength, filePointer) != NULL) { 
     resultString += resultStringBuffer; 
    } 
    status = pclose(filePointer); 
    if (status == 0) { 
     return resultString; 
    } else { 
     return 0; 
    } 
} 

所以我想扔上面的代码作为离我更愿意如果可能,请使用Qt提供的更高级别的设施。有没有人有过如何用QProcess做这个事情的例子,或者至少有一个关于如何完成的粗略想法?

这是值得的,它将在Linux上运行。

谢谢

+0

[读取QProcess输出到字符串]的可能重复(http://stackoverflow.com/questions/17344807/read-qprocess-output-to-string) –

回答

1

这样做:

void Process::runCommand(const QString &p_Command) { 
    QProcess *console = new QProcess(); 
    console->connect(console, SIGNAL(readyRead()), this, SLOT(out())); 
    console->connect(console, SIGNAL(finished(int)), this, SLOT(processFinished(int))); 
    console->start(p_Command); 
} 

void Process::out() { 
    QProcess *console = qobject_cast<QProcess*>(QObject::sender()); 
    QByteArray processOutput = console->readAll(); 
} 

void Process::processFinished(int p_Code) { 
    QProcess *console = qobject_cast<QProcess*>(QObject::sender()); 
    QByteArray processOutput = console->readAll() + QString("Finished with code %1").arg(p_Code).toLatin1(); 
} 

信号QProcess::finished()可以用来获取进程的退出代码。

相关问题