QProcess执行linux命令行的命令(详解各种情况可能存在的问题) | 您所在的位置:网站首页 › steam回应报价一直转圈圈 › QProcess执行linux命令行的命令(详解各种情况可能存在的问题) |
前言 因为我是做的linux下开发,所以程序中需要多次在qt中调用linux命令行的命令,并且需要根据命令的执行结果做出相应的判断。qt中使用QProcess类实现进程间通信,也就是说QProcess可以调用外部程序并获取外部程序的信息。linux中通过启动bash(windows中启动cmd)来执行命令行的命令,并可以获取命令行的返回信息。 下面我详细介绍一下QProcess的具体用法和我踩过的坑以及注意事项: QProcess的重要方法: start(); //启动一个进程 close(); //关闭启动的外部进程 write(); //向外部进程写入数据 readAllStandardOutput(); //读取外部进程的标准输出 readAllStandardError(); //读取外部进程的错误信息 waitForStarted() //启动阻塞,等待程序启动完毕,期间整个程序所有进程阻塞 waitForFinished() //结束阻塞,等待程序结束完毕,期间整个程序所有进程阻塞注意:QProcess中start()和write()中写的命令,末尾要加上\n(linux直接加\n,windows好像是\r\n,意思就是加个换行符),否则命令可能无法执行!!! 基础使用方法: 执行单条命令,且需要读取命令行返回信息时,代码如下: QProcess pro; connect(&pro,&QProcess::readyReadStandardOutput,this,[=,&pro]()mutable{ //注意我这里lambda表达式的写法,[]里的内容需要根据实际情况更改 QString Output=pro.readAllStandardOutput(); qDebug() //注意我这里lambda表达式的写法,[]里的内容需要根据实际情况更改 QString Output=pro.readAllStandardOutput(); qDebug() QTime Time_set = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() >”命令解决方法: QProcess pro; pro.start("bash",QStringList() QString Error=pro.readAllStandardError(); qDebug()path2} ls ${path3}执行结果:
注意:最后还是想说一下使用阻塞会导致界面产生卡顿。想要解决这个问题自然要使用多线程,将阻塞代码在其他线程中运行即可。 链接:qt中Qthread线程的使用以及安全关闭 码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方 |
CopyRight 2018-2019 实验室设备网 版权所有 |