如何从python脚本在新终端中执行cd命令并执行其他命令?

时间:2020-06-06 19:16:36

标签: python linux bash operating-system

我正在尝试在ubuntu18上运行python脚本,该脚本只会打开一个新的终端/选项卡,导航到特定文件夹,然后执行命令。但是由于我缺乏知识,这个简单的任务看起来非常艰巨。 预期:

In the python script
$cd /home/metabase
$java -jar metabase.jar 

我的代码:

try1:
cmd = "gnome-terminal --tab 'cd /home/metabase/java -jar metabase.jar; read'"
os.system(cmd)
New tab opens but nothing happens

try2:
subprocess.call(['cd /home/metabase/', 'java -jar metabase.jar'])
Error:No such file or directory

我尝试了许多其他组合。但是会导致新标签页无法打开或新标签页打开但在同一目录中却无法执行。 我对这个问题做了一些阅读。好像我正在创建这些子进程,因此当我做CD时,它什么也没做。无论如何,我研究了许多类似的stackoverflow线程,但我仍然迷路。任何方向将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

使用bash命令打开新的gnome-terminal窗口的命令是:

gnome-terminal -- bash -c 'your command'

在您的情况下:

gnome-terminal -- bash -c 'cd /home/metabase; java -jar metabase.jar; read'

确保首先从外壳程序运行。然后您可以从Python调用它:

subprocess.call(["gnome-terminal", "--", "bash", "-c", "cd /home/metabase; java -jar metabase.jar; read"])

答案 1 :(得分:0)

为什么要更改目录?如果您愿意,可以直接做:

os.system('java -jar /home/metabase/metabase.jar')将返回流程退出值,0表示成功。

请记住,os.system将执行在字符串中以字符串形式传递的命令。

如果您不想产生新的外壳,可以使用:

subprocess.call(['java', '-jar', '/home/metabase/metabase.jar'])这样就没有启动系统外壳程序,因此第一个参数必须是可执行文件的路径。