0

我正在为我的项目学习 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  

寻找建议,请指导我获得解决方案。提前致谢。

4

3 回答 3

4

让我们备份并仔细查看您发布的主要代码行:

os.system(""xfce4-terminal -e 'bash -c \"./testing.sh; exec bash\"'")

它有什么作用?

  • 它使用 Python 调用 shell ( os.system),这通常不是一个好主意,原因有很多。
  • 在那个 shell 中,它启动 xfce4-terminal。
  • 在 xfce4-terminal 内部,它运行 bash。可能 xfce4-terminal 在另一个 bash 中运行这个 bash。
  • 在这个新的 bash 中,它运行 testing.sh。
  • 最后,由于我不清楚的原因,它运行了另一个 bash。

流程层次结构是什么样的?

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 终端:

subprocess.check_call(['xfce4-terminal', '-e', './testing.sh'])
于 2013-06-01T11:20:53.603 回答
0

我已经尝试过这样的事情并且它现在正在工作:

os.system("xfce4-terminal -e 'bash -c \"./testing.sh ; sleep 20 ; exit 0\"'")

谢谢您的帮助。

于 2013-06-03T04:18:18.607 回答
0

终端在其最后一个子进程退出时关闭。这将做我认为你想要的:

os.system("xfce4-terminal -e 'bash -c \"echo hello ; /bin/bash ; exit 0\"'")

我测试过。

为回应评论而添加

Ubuntu 中有一个 shell 脚本,/usr/bin/usb-devices它打印到标准输出然后退出。如果我运行 Python

os.system("xfce4-terminal -e /usr/bin/usb-devices")

然后出现一个终端,显示脚本的输出,然后终端退出。它真的不能比这简单得多。

于 2013-06-01T11:12:54.363 回答