Запустите команду оболочки через QProcess на платформе Android

Я не могу запустить какую-либо команду через QProcess на платформе Android. Я использую библиотеку Qt. Кто-нибудь может объяснить, как запускать команды оболочки из моего приложения на платформе Android?

    QProcess process();

    process.execute("ls");

   bool finished = process.waitForFinished(-1);

   qDebug() <<  "End : " << finished << " Output : " << process.errorString();

Процесс не завершится, если я не укажу время ожидания. process.waitForFinished() возвращает false, когда я указываю время ожидания, скажем, 10000 мс.

2 ответа

Решение

Ваш пример кода неисправен, и он не будет работать на любой платформе!ls команда не является точной! Эта команда встроена в программу оболочки, например bash,

Еще одна ошибка в вашем коде заключается в том, что QProcess::execute это статическая функция. Таким образом, последняя строка не влияет на процесс, который вы пытались запустить.

Итак, ваш код должен выглядеть так:

QProcess process;
process.start("bash", QStringList() << "-c" << "ls");

bool finished = process.waitForFinished(-1);

Ты используешь QProcess::execute() которая является статической функцией. Цитирование документации Qt: "Запускает команду программы в новом процессе, ожидает ее завершения".

Итак, что может произойти в вашем коде:

QProcess process();

process.execute("ls"); // Start "ls" and wait for it to finish
// "ls" has finished
bool finished = process.waitForFinished(-1); // Wait for the process to finish, but there is no process and you could get locked here forever...

Есть 2 способа исправить ваш код:

QProcess process();

process.start("ls"); // Start "ls" and returns

bool finished = process.waitForFinished(-1);

qDebug() <<  "End : " << finished << " Output : " << process.errorString();

или же

 QProcess::execute("ls");
Другие вопросы по тегам