linux qt 项目中QProcess调用命令行命令执行python脚本

简介: linux qt 项目中QProcess调用命令行命令执行python脚本

1、使用场景


linux下,qt项目中,想要在项目中利用QProcess执行命令行的命令(此命令是执行一个.py的脚本)并获取输出结果。


2、python脚本


我自己写了一个脚本,脚本的内容是创建一条带有自定义参数的命令,使其在执行.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!")

脚本在终端内直接带参数运行的结果为:

image.png



3、在QT项目中,我利用QProcess来执行这条自定义带参数的命令,并等待结果


QProcess使用可以看下面这篇例子,这里不做过多介绍,就是一个调用系统命令的qt库

#include <QFile>
#include <QDebug>
#include <QProcess>
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()<<"执行脚本错误:"<<error; //打印出错提示
        }
        process.close();
    }else{
        qDebug()<<".py或shell文件不存在";
    }
相关文章
|
10天前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
112 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
35 11
|
2月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
130 20
|
2月前
|
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
216 20
|
2月前
|
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
145 8
python 命令行参数 argparse详解
这篇文章是关于Python命令行参数解析库`argparse`的详细解释和使用教程。文中提供了完整的代码模板,包括如何定义命令行参数、如何添加位置参数、可选参数和布尔参数,以及如何解析和使用这些参数。文章还包含了示例代码和测试用例,以展示如何在实际程序中应用`argparse`库。
71 0
|
6月前
|
python命令行解析模块argparse
python命令行解析模块argparse

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等