目录
1、使用场景
2、python脚本
3、QT 中用QProcess命令执行python脚本
linux下,qt项目中,想要在项目中利用QProcess执行命令行的命令(此命令是执行一个.py的脚本)并获取输出结果。
我自己写了一个脚本,脚本的内容是创建一条带有自定义参数的命令,使其在执行.py脚本时可以带参数,如下示例,执行脚本后会打印出固定字符串
.py脚本执行示例
普通.py脚本执行: ./test.py
带参数脚本执行: ./test.py --parameter1
这里我的自定义参数设置的是--getinfo,打印输出的是“.python success!!!”
.py脚本内容
#!/usr/bin/python
import getopt
import sys
if __name__ == '__main__':
try:
options, args = getopt.getopt(sys.argv[1:], "-i", ['getinfo'])
for name, value in options:
if name in ('-i', '--getinfo'):
print(".python success!!!!")
except getopt.GetoptError:
print("error!")
脚本在终端内直接带参数运行的结果为:
在QT项目中,我利用QProcess来执行这条自定义带参数的命令,并等待结果
QProcess使用可以看下面这篇例子,这里不做过多介绍,就是一个调用系统命令的qt库
【Qt】QProcess的使用总结_Antrn的博客-CSDN博客_qprocess
#include
#include
#include
QFile file("/etc/ksc-defender/securityPatrol/case/"); //判断存放.py脚本的路径是否存在
if(file.exists()){
QStringList options;
QString path;
path = "/etc/ksc-defender/securityPatrol/case/"+ m_strName;
//m_strName是.py的名字,如test.py
options << path << "--getinfo"; //这里是实际在终端要敲的命令,如果中间有空格,要用 << 分隔开
QProcess process; //执行终端命令的,要记得加头文件
if(m_strName.contains(".py")){ //判断文件是否是以.py结尾的python文件
process.start("/usr/bin/python3", options); //start的第一个参数我理解为解释器的位置,第二个参数就是实际需要执行的命令
}
process.waitForFinished(); //等待运行结束,以不阻塞的形式
process.waitForReadyRead();
QString msg = process.readAllStandardOutput(); //命令行执行结果
QString error = process.readAllStandardError(); //命令行执行出错的提示
if(!error.isEmpty()){
qDebug()<<"执行脚本错误:"<
运行结果就是可以收到跟命令行执行一样的结果
#END