ubuntu qt 运行命令行

1.C++实现

下面是封装好的C++头文件,直接调用run_cmd_fun()即可。

#ifndef GET_CMD_H
#define GET_CMD_H

#endif // GET_CMD_H
#include <iostream>
#include<QString>
using namespace std;

//system("gnome-terminal --window -e 'bash -c \"pwd;ls;exec bash\"' --tab -e 'bash -c \"pwd; exec bash\"'");
QString win_cmd = "gnome-terminal --window -e 'bash -c \"";  // 运行窗口的命令
QString tab_cmd = " --tab -e 'bash -c \""; //运行标签的命令
QString pause_cmd = ";exec bash\"'";  //终端等待的命令
QString source_path = "source /opt/ros/noetic/setup.bash ;"; //添加环境变量
QString Qcmd = "";

void run_cmd_fun(QString cmd1)
{
    //get one cmd
    Qcmd = "";
    Qcmd.append(win_cmd);
    Qcmd.append(source_path);
    Qcmd.append(cmd1);
    Qcmd.append(pause_cmd);
    string cmd = Qcmd.toStdString();
    cout << cmd << endl;
    system(cmd.c_str());
}

void run_cmd_fun(QString cmd1, QString cmd2, int input_time=1)
{
    //get two cmd
    //The time set
    Qcmd = "";
    QString pause_t = "sleep ";
    pause_t.append(QString::number(input_time));
    pause_t.append(";");
    //The  first cmd set
    Qcmd.append(win_cmd);
    Qcmd.append(cmd1);
    Qcmd.append(pause_cmd);

    //The  second cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(cmd2);
    Qcmd.append(pause_cmd);

    //The  cm1 + cm2 --> string cmd
    string cmd = Qcmd.toStdString();
    system(cmd.c_str());
}

void run_cmd_fun(QString cmd1, QString cmd2, QString cmd3, int input_time=1)
{
    //get three cmd
    Qcmd = "";
    QString pause_t = "sleep ";
    pause_t.append(QString::number(input_time));
    pause_t.append(";");
    //The  first cmd set
    Qcmd.append(win_cmd);
    Qcmd.append(cmd1);
    Qcmd.append(pause_cmd);

    //The  second cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(cmd2);
    Qcmd.append(pause_cmd);

    //The  third cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(pause_t);
    Qcmd.append(cmd3);
    Qcmd.append(pause_cmd);

    //The  cmd1 + cmd2 + cmd3 --> cmd
    string cmd = Qcmd.toStdString();
    system(cmd.c_str());
}


void run_cmd_fun(QString cmd1, QString cmd2, QString cmd3, QString cmd4, int input_time=1)
{
    //get four cmd
    Qcmd = "";
    //The time set
    QString pause_t = "sleep ";
    pause_t.append(QString::number(input_time));
    pause_t.append(";");

    //The first cmd set
    Qcmd.append(win_cmd);
    Qcmd.append(cmd1);
    Qcmd.append(pause_cmd);

    //The second cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(cmd2);
    Qcmd.append(pause_cmd);

    //The third cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(pause_t);
    Qcmd.append(cmd3);
    Qcmd.append(pause_cmd);

    //The fourth cmd set
    Qcmd.append(tab_cmd);
    Qcmd.append(pause_t);
    Qcmd.append(pause_t);
    Qcmd.append(pause_t);
    Qcmd.append(cmd4);
    Qcmd.append(pause_cmd);

    // cmd1 + cmd2 + cmd3 + cmd4 = cmd
    string cmd = Qcmd.toStdString();
    system(cmd.c_str());
}

注意:想要生成双击直接运行的程序,需要添加:

QMAKE_LFLAGS += -no-pie

在这里插入图片描述

补充切换不同页面;

ui->stackedWidget->setCurrentIndex(3);

2.python实现

直接调用:run_cmd([“roscore”,“rostopic list”], 2)

openvino_path = "source /opt/intel/openvino/bin/setupvars.sh;"  # 添加的一些虚拟环境
ros_path = "source ~/.bashrc;"+openvino_path 


win_cmd = "gnome-terminal --window -e 'bash -c \""+ros_path
tab_cmd = " --tab -e 'bash -c \""+ros_path
end_cmd = ";exec bash\"'"

def run_win(cmd):
    # 运行的第一个窗口终端
    cmd = win_cmd+cmd+end_cmd
    return cmd

def run_tab(cmd, t):
    # 运行的标签终端
    delay_t = "sleep {};".format(str(t))
    cmd = tab_cmd+delay_t+cmd+end_cmd
    return cmd

def run_cmd(cmds, t = 2):
    cmd  = run_win(cmds[0])
    for i in range(1, len(cmds)):
        cmd = cmd + run_tab(cmds[i], t*i)
    print(cmd)
    os.system(cmd)

相关推荐

  1. 如何使用命令运行PHP脚本?

    2024-01-18 06:22:04       57 阅读
  2. 托管你的程序——命令后台运行记录

    2024-01-18 06:22:04       30 阅读
  3. MacOS命令运行fortran程序|编程私教解答

    2024-01-18 06:22:04       28 阅读
  4. 【Unity】如何让Unity程序一打开就运行命令命令

    2024-01-18 06:22:04       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 06:22:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 06:22:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 06:22:04       82 阅读
  4. Python语言-面向对象

    2024-01-18 06:22:04       91 阅读

热门阅读

  1. ubuntu18.04clion无法进入断点

    2024-01-18 06:22:04       60 阅读
  2. ubuntu 20.04 docker及nvidia-docker2安装

    2024-01-18 06:22:04       48 阅读
  3. Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?

    2024-01-18 06:22:04       47 阅读
  4. ubuntu 22.04 安装 device-tree-compiler (dtc)

    2024-01-18 06:22:04       53 阅读
  5. mybatis-Plus 的自动填充

    2024-01-18 06:22:04       49 阅读
  6. linux配置DNS主从服务器

    2024-01-18 06:22:04       57 阅读
  7. Python程序员常用的IDE和其它开发工具

    2024-01-18 06:22:04       48 阅读
  8. SeaTunnel 、DataX 、Sqoop、Flume、Flink CDC 对比

    2024-01-18 06:22:04       49 阅读
  9. FineBI实战项目一(25):实战项目一总结

    2024-01-18 06:22:04       55 阅读