首页 > 解决方案 > QT返回shell命令结果非阻塞

问题描述

在 qt 中,我尝试运行以下 shell 命令:

 arp | grep -i 'test'

我目前有以下代码:

QString Network::getMac(){
     QProcess sh;
     sh.start("sh");
     sh.waitForStarted();
     sh.write("arp  -n| grep -i 'test'");
     sh.closeWriteChannel();
     sh.waitForFinished();
     QString line=  sh.readAll().replace("\n","").toLower();
     return line;
}

我想使用mac,例如:

  QString mac = objectOfClassThatHasTheFunction->getMac();

它工作得很好,但问题是它需要很长时间并且阻塞了程序。文档说waitForFinished Blocks until the process has finished and the finished() signal has been emitted, or until msecs milliseconds have passed.但是我怎样才能在不阻塞的情况下返回结果?当我想使用结果时,我应该如何运行 QProcess 而不会阻塞?

我可以通过使用 arp -n 来加快进程,但我想了解如何正确使用 qprocess。

标签: qtqprocess

解决方案


* bool QProcess::startDetached(qint64 pid = nullptr)

 QProcess sh;
 sh.setProgram("sh");
 sh.setArguments({"arp -n | grep -i 'test'"});
 connect(&sh,&QProcess::readyReadStandardOutput,this,&YOUR_CLASS::YOUR_SLOT);
 sh.start(); //EDIT: startDetached() is not emitting signals

YOUR_CLASS::YOUR_SLOT 是您可以获得标准输出的插槽

注意“sh”变量的范围。如果在函数中声明,它可能会被销毁。


推荐阅读