在Android平台上通过QProcess运行shell命令

时间:2017-01-19 07:18:44

标签: android qt qprocess

我无法在Android平台上通过QProcess运行任何命令。我正在使用Qt库。任何人都可以解释如何从Android平台上的应用程序运行shell命令吗?

    QProcess process();

    process.execute("ls");

   bool finished = process.waitForFinished(-1);

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

如果我没有指定超时,则该过程无法完成。当我指定超时时,process.waitForFinished()返回false,比如10000毫秒。

2 个答案:

答案 0 :(得分:5)

您的示例代码有问题,无法在任何平台上运行! ls命令不是一个严格的命令!此命令构建为shell程序,例如bash

您的代码中的另一个错误是QProcess::executestatic function。 所以最后一行不会对你试图开始的过程产生影响。

所以你的代码应该是这样的:

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

bool finished = process.waitForFinished(-1);

答案 1 :(得分:0)

您正在使用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");