我正在为我的项目学习bash脚本和python,我想在完成执行后杀死终端。 我在一个终端上运行我的进程,当我执行它时,它打开一个新的终端并执行请求的操作,之后在完成后必须关闭新终端,这不会发生。 我的代码是:
import os
os.system(""xfce4-terminal -e 'bash -c \"./testing.sh; exec bash\"'")
当我运行它时,它将打开新的终端并执行它,并在执行“pwd”后
ubuntu:-/home/new$
无法向其发送任何命令 完成后我想终止终端,因为下次执行我想打开新的终端。
我试过这个效果很好但是不知道如何添加python脚本:
a=`tty`
echo $a
b=`tty | sed 's/\/dev//'`
echo $b
c=`ps aux | grep $a | grep 'bash$' | awk '{print $2}'`
echo $c
d= `$c | awk '{print $1}'
kill -9 $d
寻找建议,请指导我获得解决方案。 提前谢谢。
答案 0 :(得分:4)
让我们回过头来仔细查看您发布的一个主要代码行:
os.system(""xfce4-terminal -e 'bash -c \"./testing.sh; exec bash\"'")
它做什么?
os.system
),由于种种原因,这通常不是一个好主意。流程层次结构是什么样的?
shell (whichever you use to launch this thing, likely bash)
python
shell (the system default, possibly bash)
xfce4-terminal
bash (replaced by another bash at the end, "exec bash")
bash
testing.sh
你看到这看起来有多疯狂吗?想想你实际想要完成的事情。它可能看起来更像是这样:
shell
python
testing.sh
怎么做?
import subprocess
subprocess.check_call(['./testing.sh'])
如果你真的需要启动xfce4-terminal:
subprocess.check_call(['xfce4-terminal', '-e', './testing.sh'])
答案 1 :(得分:0)
终端在最后一个子进程退出时关闭。这将做我认为你想要的:
os.system("xfce4-terminal -e 'bash -c \"echo hello ; /bin/bash ; exit 0\"'")
我测试过。
在回复评论时添加
Ubuntu /usr/bin/usb-devices
中有一个shell脚本,它打印到stdout然后退出。如果我运行Python
os.system("xfce4-terminal -e /usr/bin/usb-devices")
然后出现一个终端,显示脚本的输出,然后终端退出。它真的不能简单得多。
答案 2 :(得分:0)
我尝试了类似这样的事情,现在正在努力:
os.system("xfce4-terminal -e 'bash -c \"./testing.sh ; sleep 20 ; exit 0\"'")
感谢您的帮助。