打开新的 gnome 终端并运行命令

新手上路,请多包涵

我正在尝试编写一个脚本来打开一个新终端,然后从该终端运行一个单独的 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() 。我希望原始终端窗口保持“自由”状态以运行其他命令。

原文由 Joe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

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

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

x, –执行

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

所以:

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

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

communicate 尝试需要一个换行符作为您的输入,但也应该有效,但终端等复杂进程不“喜欢”被重定向。这似乎是在向后使用交互式工具。再一次,这将阻塞直到终止。可行 方法是使用 p.stdin.write("python f.py\n") 来控制 python 脚本。但在那种情况下,它不太可能起作用。

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

python f.py &

在外壳中。

原文由 Jean-François Fabre 发布,翻译遵循 CC BY-SA 4.0 许可协议

截至 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

原文由 dardisco 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题