Python无需打开终端即可执行Shell命令

时间:2018-06-19 12:42:40

标签: python shell terminal subprocess gnome-shell

我正在编写一个脚本,该脚本应在给定的应用程序已经运行的情况下聚焦,否则启动该应用程序。

我正在使用run()模块的subprocess方法来运行一些shell命令,以检查实例当前是否正在运行,以及是否不启动新实例。

如果从终端执行该脚本,效果很好,但是如果通过Gnome Shell的键盘快捷键启动该脚本,则不会执行任何操作。

我的问题是如何在不打开终端的情况下执行shell命令?

以下是我在shell命令中使用的代码片段:

def focus_instance_of(application):
    # Moves the window to the current desktop, raises it und gives it focus
    print("Put " + application + " in focus...")
    subprocess.run(["wmctrl", "-R", application])

2 个答案:

答案 0 :(得分:1)

这是如何“无需打开终端”即可执行命令(无需外壳)。

如果我假设它是从终端-命令行正确执行的,而不是从Gnome Shell中执行,则不同环境的某些功能很可能导致它失败。

我建议您将stdoutstderr重定向到日志文件,以便可以开始调试它。检查未处理的异常。还要检查wmctrl执行的输出和返回代码,它可能正在报告错误。

答案 1 :(得分:0)

您可以添加关键字参数shell=True,这将在后台生成一个shell以运行命令(但不会打开终端窗口)。

subprocess.run(["wmctrl", "-R", application], shell=True)