Как получить возвращенный стандартный вывод программы, вызываемой с помощью QProcess?
Я пишу программу на Qt и в настоящее время использую popen для запуска команды linux и чтения вывода в строку:
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.
Спасибо
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()
может быть использован для получения кода выхода процесса.