在ubuntu/linux下利用qt启动终端并执行命令/执行外部程序或者脚本/gnome-termianl使用,gnome-terminal -x弃用

前言

在上次的博客中我只记录并说明了一部分按键的实现,这次我要记录的是点击按键后启动终端程序并执行相关的代码。

我喜欢的歌

在上一篇的博客中我忘记放歌了,这次我记得了,以后也会记得放歌的,顺带夹带一下私货,欢迎去关注我的公众号,叫世纪末的转角,因为比起写程序做项目,为更希望能以不同的眼光去看待这个世界,毕竟这个还是有很多值得我们去静下心来去细细品位的。如果可以去关注的话将不胜感激,因为刚刚起步,所以还要慢慢打理,然后非常感谢各位的关注。
寻梦环游记 - Remember Me-泠鸢

接下来进入正体部分

界面设置

我的界面没什么好讲的,就一个按钮,点击后执行相应的代码,主要还是代码内容,其他的都是次要的。
在ubuntu/linux下利用qt启动终端并执行命令/执行外部程序或者脚本/gnome-termianl使用,gnome-terminal -x弃用_第1张图片

代码部分

首先我们要先确定我们在QT中按钮按下后要执行开启终端或者使用一些系统的一些服务,那就必须使用到system()函数,虽然我查资料知道不止这一种办法,但是为使用过后最终还是感觉使用system函数较为方便。

打开终端

如果只是要实现打开终端的操作的话(当然,一些项目中肯定不可能只是打开终端这么简单,我这里只是先举个例子,毕竟要从简单到复杂麻,确信脸!!)。
代码如下:

system("gnome-terminal --tab --将你要执行的命令放在这里");

其中,我这里的–tab是以标签的方式打开的,这里我介绍一下gnome-terminal命令的使用。

gnome-terminal [OPTION…] [-- 命令 …]
其中有两个经常用到的option,

  • 打开新窗口或终端标签页的选项;可指定多个:
    –window 打开包含默认配置下一个标签页的一个新窗口
    –tab 在最后一个打开的窗口中打开一个默认配置下的新标签页
  • 使用的情况要分你所要执行的命令来分,如果年执行的是一个可以直接回传,不需要等待的命令的话,例如像 ls,ifconfig类似的指令的,可以不用这两个指令,也可以用–tab (按道理说还是用–tab比较好,不用的话可能会执行不了。
  • 另一种情况是需要执行等待程序的时候,例如启动一个监听程序阿,这类的命令就必须用到上面这两个option了,因为在按钮按下后, 你写的程序去执行外部程序必须要等外部程序结束才能返回,如果不使用以上两个option的话,程序就会发生卡死,一般命令如下
system("gnome-terminal --tab --你要执行的命令");
system("gnome-termianl --window --你要执行的命令");

关于gnome-terminal -x/e 弃用的问题

在实现功能之前我也有去网上查找一些资料和实现方法,看到最多的是使用如下命令的

system("gnome-terminal -x bach -c '将你的命令放在此处'");

然而我在尝试的时候却报错了,报错的原因是gnome-termianl -x 已经被弃用,具体如下

在这里插入图片描述
我查了很多解决方法,但是都没有找到相关的信息,然后为觉得这可能是刚更新的策略,所以我自己就一个个的尝试,终于是知道了怎么使用。

  • 除了上面我说的是一部分之外呢,我把具体的信息放在下面,
用法:
  gnome-terminal [OPTION…] [-- 命令 …]

帮助选项:
  -h, --help                     显示帮助选项
  --help-all                     显示全部帮助选项
  --help-gtk                     显示 GTK+ 选项
  --help-terminal                显示终端选项
  --help-window-options          显示每个窗口的选项
  --help-terminal-options        显示每个终端的选项

应用程序选项:
  --load-config=文件             载入一个终端配置文件
  --preferences                  显示首选项窗口
  -p, --print-environment        打印与终端交互的环境变量
  -v, --verbose                  增加诊断详细程度
  -q, --quiet                    抑制输出
  --display=显示                 要使用的 X 显示

因为-x和-e已经被弃用了,所以取而代之的是 - -符号,还有就是 bach -c这条命令,因为是在新启动的终端里执行bash -c,即启动子shell,所以总体的代码就应该如下:

system("gnome-terminal --tab -- 'bach -c'&");

这里的&符号是&切换到后台运行,防止阻塞当前进程的,让进程异步执行由此可知shell也是多进程模型,而js脚本是单进程模型。

程序例子

下面举例一些实现,

system("gnome-terminal --tab -- 'ifconfig'&");

效果如下:

在这里插入图片描述
在ubuntu/linux下利用qt启动终端并执行命令/执行外部程序或者脚本/gnome-termianl使用,gnome-terminal -x弃用_第2张图片- 又比如如下用python 启动一个服务器

system("gnome-terminal --window -- python '服务器在目录中的路径,因为一些原因,我不能放出来'&");

交流群

我最近建立了一个交流小群,为希望的是这个群虽小但精,而且为也不允许它大,在群里会分享一些源码和资源甚至是一些福利,所以欢迎大佬们前来加群呀,群号码是:1140238314

你可能感兴趣的:(QT,linux,c++,ubuntu,安全)