Запустите команду оболочки через 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");