我正在编写一个脚本,该脚本应在给定的应用程序已经运行的情况下聚焦,否则启动该应用程序。
我正在使用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])
答案 0 :(得分:1)
这是如何“无需打开终端”即可执行命令(无需外壳)。
如果我假设它是从终端-命令行正确执行的,而不是从Gnome Shell中执行,则不同环境的某些功能很可能导致它失败。
我建议您将stdout
和stderr
重定向到日志文件,以便可以开始调试它。检查未处理的异常。还要检查wmctrl
执行的输出和返回代码,它可能正在报告错误。
答案 1 :(得分:0)
您可以添加关键字参数shell=True
,这将在后台生成一个shell以运行命令(但不会打开终端窗口)。
subprocess.run(["wmctrl", "-R", application], shell=True)