qt - 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。
解决方案
* 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”变量的范围。如果在函数中声明,它可能会被销毁。
推荐阅读
- java - 突发错误:ValidatorException: PKIX 路径构建失败
- c# - 如何为 ListView 中的每个组应用不同的数据模板
- javascript - JQuery textarea没有提交数据
- python - 混合单词表中的单词并制作新的单词表
- android - Android Espresso 因关键事件错误而失败
- javascript - 设置基于用户输入检查的复选框
- c - 使用辅助变量在C中反转数组
- openmdao - 在组内的组件内更新 IndepVarComp
- django - Django 2 Angular 6 编译的静态文件总是路由到静态文件夹
- python - nltk 太多值无法解包(预期为 2)