在Window中执行管道命令时,由于双引号或参数分割或合并的原因是无法执行的,例如以下这条命令:
cmd.exe /c netstat -ano|find “80”|find “62499”
也正因为Window的差异,故Qt提供了一个特殊函数:void QProcess::setNativeArguments(const QString &arguments)
具体执行如下:
#if defined(Q_OS_WIN)
QString cmd = QString("/c netstat -ano|find \"80\"|find \"%1\"").arg(port);
qDebug() << "onConnected" << cmd;
proc->setNativeArguments(cmd);
proc->start("cmd.exe");
#elif defined(Q_OS_MAC)
QStringList args;
args << "-c" << QString("netstat -nat|grep %1|grep 80").arg(port);
proc->start("/bin/bash", args);
#else
QStringList args;
args << "-c" << QString("netstat -ntp|grep %1|grep 80").arg(port);
proc->start("/bin/bash", args);
#endif