QProcess执行linux命令行的命令(详解各种情况可能存在的问题) 您所在的位置:网站首页 steam回应报价一直转圈圈 QProcess执行linux命令行的命令(详解各种情况可能存在的问题)

QProcess执行linux命令行的命令(详解各种情况可能存在的问题)

2023-09-27 22:42| 来源: 网络整理| 查看: 265

前言

因为我是做的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}

执行结果:

img 使用脚本时记得给脚本文件添加可执行权限

chmod 777 test.sh

注意:最后还是想说一下使用阻塞会导致界面产生卡顿。想要解决这个问题自然要使用多线程,将阻塞代码在其他线程中运行即可。

链接:qt中Qthread线程的使用以及安全关闭

码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有