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文件不存在";
    }
相关文章
|
域名解析 网络协议 安全
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
|
监控 数据可视化 Ubuntu
|
8月前
|
Java Linux 开发工具
Linux下版本控制器(SVN) -命令行客户端
Linux下版本控制器(SVN) -命令行客户端
249 4
|
9月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
738 12
|
10月前
|
运维 安全 Linux
试试Linux设备命令行运维工具——Wowkey
WowKey 是一款专为 Linux 设备设计的命令行运维工具,提供自动化、批量化、标准化、简单化的运维解决方案。它简单易用、高效集成且无依赖,仅需 WIS 指令剧本文件、APT 账号密码文件和 wowkey 命令即可操作。通过分离鉴权内容与执行内容,WowKey 让运维人员专注于决策,摆脱繁琐的交互与执行细节工作,大幅提升运维效率与质量。无论是健康检查、数据采集还是配置更新,WowKey 都能助您轻松应对大规模设备运维挑战。立即从官方资源了解更多信息:https://atsight.top/training。
|
10月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。
|
12月前
|
Ubuntu Shell Linux
Linux命令行解释器的模拟实现
Linux命令行解释器的模拟实现
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
661 3
|
Linux 数据安全/隐私保护
适用于 Linux 的最佳命令行下载加速器
适用于 Linux 的最佳命令行下载加速器
|
XML 数据可视化 C语言
001 Qt_从零开始创建项目
本文是Qt专栏的第一篇,介绍了如何创建一个Qt项目。
464 4