运行 shell 在 Android 平台上通过 QProcess 命令
Run a shell command via QProcess on Android Platform
我无法在 Android 平台上通过 QProcess 运行 任何命令。我正在使用 Qt 库。谁能解释如何从我的 Android 平台上的应用程序 运行 shell 命令?
QProcess process();
process.execute("ls");
bool finished = process.waitForFinished(-1);
qDebug() << "End : " << finished << " Output : " << process.errorString();
如果我不指定超时,该过程不会完成。 process.waitForFinished() returns false 当我指定超时比方说 10000 毫秒。
您正在使用 QProcess::execute()
,这是一个静态函数。引用 Qt documentation:“在新进程中启动程序命令,等待它完成”。
那么您的代码中可能发生的情况是:
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...
有两种方法可以修复您的代码:
QProcess process();
process.start("ls"); // Start "ls" and returns
bool finished = process.waitForFinished(-1);
qDebug() << "End : " << finished << " Output : " << process.errorString();
或
QProcess::execute("ls");
您的示例代码有问题,无法在任何平台上运行!
ls
命令不准确!此命令内置于 shell 程序中,例如 bash
.
您代码中的另一个错误是 QProcess::execute
是 static function。
所以最后一行对您尝试启动的进程没有影响。
因此您的代码应如下所示:
QProcess process;
process.start("bash", QStringList() << "-c" << "ls");
bool finished = process.waitForFinished(-1);
我无法在 Android 平台上通过 QProcess 运行 任何命令。我正在使用 Qt 库。谁能解释如何从我的 Android 平台上的应用程序 运行 shell 命令?
QProcess process();
process.execute("ls");
bool finished = process.waitForFinished(-1);
qDebug() << "End : " << finished << " Output : " << process.errorString();
如果我不指定超时,该过程不会完成。 process.waitForFinished() returns false 当我指定超时比方说 10000 毫秒。
您正在使用 QProcess::execute()
,这是一个静态函数。引用 Qt documentation:“在新进程中启动程序命令,等待它完成”。
那么您的代码中可能发生的情况是:
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...
有两种方法可以修复您的代码:
QProcess process();
process.start("ls"); // Start "ls" and returns
bool finished = process.waitForFinished(-1);
qDebug() << "End : " << finished << " Output : " << process.errorString();
或
QProcess::execute("ls");
您的示例代码有问题,无法在任何平台上运行!
ls
命令不准确!此命令内置于 shell 程序中,例如 bash
.
您代码中的另一个错误是 QProcess::execute
是 static function。
所以最后一行对您尝试启动的进程没有影响。
因此您的代码应如下所示:
QProcess process;
process.start("bash", QStringList() << "-c" << "ls");
bool finished = process.waitForFinished(-1);