在Qt Ubuntu 14.04中,“iw”命令无法在Qprocess中运行

时间:2015-02-24 15:15:17

标签: c++ qt qml ubuntu-14.04 qprocess

我正在尝试使用QProcess运行以下命令:

QString cmd = QString("iw wlan0 scan | grep dBm");
QProcess *qProc = new QProcess();
qProc->start(cmd);
qProc->waitForFinished();

并收到错误:

  

“用法:iw [选项]开发扫描[-u] [freq ] [ies] [ssid |被动]

     

扫描给定频率并探测给定的SSID      (如果没有给出通配符),除非要求被动扫描。      如果指定了-u,则在扫描结果中打印未知数据。      指定的(供应商)IE必须格式良好。

选项:

    --debug     enable netlink debugging

但该命令在终端中运行良好...请帮我找到解决方案。

2 个答案:

答案 0 :(得分:1)

QProcess运行一个进程,执行一个命令,你可以运行 sh 并在 -c 之后传递命令:

QString cmd = QString("iw wlan0 scan | grep dBm");
QProcess sh;
sh.start("sh", QStringList() << "-c" << cmd);
sh.waitForFinished();
QByteArray out = sh.readAll();

答案 1 :(得分:1)

使用QProcess运行此类命令的一种方法是将其放在shell脚本中并将其命名为:

QProcess process;
process.start("/bin/sh", QStringList()<< "myScript.sh");

您也可以在-c之后将其作为参数传递给bash或shell:

QProcess process;
process.start("/bin/sh", QStringList()<<"-c"<<"iw wlan0 scan | grep dBm" );

与shell或bash系统无关的更通用的解决方案是使用QProcess的对象:

QProcess process1
QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("iw wlan0 scan");
process2.start("grep dBm");
process2.setProcessChannelMode(QProcess::ForwardedChannels);

process1.waitForStarted();

process2->waitForFinished();