打开新的gnome-terminal并运行命令

时间:2017-11-27 20:04:28

标签: python python-2.7

我正在尝试编写一个打开新终端的脚本,然后从该终端运行一个单独的python脚本。

我试过了:

os.system("gnome-terminal 'python f.py'")

p = Popen("/usr/bin/gnome-terminal", stdin=PIPE)
p.communicate("python f.py")

但这两种方法只打开一个新终端而不运行f.py。我如何打开终端并运行单独的脚本?

编辑: 我想打开一个新的终端窗口,因为f.py是一个运行serve_forever()的简单服务器。我希望原始终端窗口能够“免费”运行其他命令。

4 个答案:

答案 0 :(得分:2)

与大多数终端一样,gnome终端需要options来执行命令:

gnome-terminal [-e, --command=STRING] [-x, --execute]

您可能需要添加-x选项:

  

x, - execute

     

执行终端内部命令行的其余部分。

这样:

os.system("gnome-terminal -x python f.py")

除非您将&添加到命令行BTW,否则不会在后台运行您的流程。

communicate尝试需要输入换行符,但也应该有效,但是像终端这样的复杂流程不会像#34;"被重定向。这似乎是向后使用交互式工具。 而且,这将阻止直到终止。 的工作原理是使用p.stdin.write("python f.py\n")来控制python脚本。但在这种情况下,它不太可能奏效。

所以看起来你甚至不需要python做你想要的。你只需要运行

python f.py &

在一个shell中。

答案 1 :(得分:1)

以下是如何使用subprocess.call使用argparse正确解析输入来调用可执行python文件的完整示例。

目标流程将打印您的给定输入。

要调用的python文件:

import argparse    
parser = argparse.ArgumentParser()

parser.add_argument("--file", help="Just A test", dest='myfile')
args = parser.parse_args()
print args.myfile

您的调用python文件:

from subprocess import call


#call(["python","/users/dev/python/sandboxArgParse.py", "--file", "abcd.txt"])
call(["gnome-terminal", "-e", "python /users/dev/python/sandboxArgParse.py --file abcd.txt"])
  

仅供参考:   您可能不需要python调用另一个python脚本来运行带有进程的终端窗口,但可以执行以下操作:

gnome-terminal -e "python /yourfile.py -f yourTestfile.txt"

答案 2 :(得分:1)

以下代码将打开一个新终端并执行该过程:

process = subprocess.Popen(
    "sudo gnome-terminal -x python f.py", 
    stdout=subprocess.PIPE,
    stderr=None,
    shell=True
)

答案 3 :(得分:-1)

截至GNOME Terminal 3.24.2 Using VTE version 0.48.4 +GNUTLS -PCRE2

  

不建议使用选项-x,并且可以在更高版本的gnome-terminal中将其删除。   使用“-”终止选项,并在命令行之后执行。

因此首选语法似乎是

gnome-terminal -- echo hello

而不是

gnome-terminal -x echo hello