macOS下Python打开已运行应用时重复启动新实例如何解决
问题原因
你调用open命令时传入的-n(--new)参数是导致启动全新应用实例的核心原因:macOS 自带的open命令中,-n参数的作用就是强制创建应用的新运行实例,完全忽略后台已存在的运行进程。
解决方案
直接移除调用参数里的-n即可,调整后open命令会自动检测目标应用的运行状态:
- 如果应用已经在后台运行,会直接将应用窗口激活拉到前台,不会启动新实例
- 如果应用未启动,才会正常启动应用
调整后的代码示例
如果只需要唤起应用,不需要阻塞等待应用退出,可以同时去掉非必须的-W参数(该参数会让当前Python进程阻塞,直到被打开的应用退出才会继续执行后续代码),另外调用系统应用时不需要写全桌面路径,直接传应用名即可自动识别:
import subprocess subprocess.call( ["/usr/bin/open", "-a", "App Store"] )
如果你确实需要等待应用退出后再执行后续逻辑,保留-W参数即可,只要去掉-n就不会重复启动新实例:
import subprocess subprocess.call( ["/usr/bin/open", "-W", "-a", "App Store"] )
注意事项
- 如果要唤起的是存放在桌面等非默认应用目录的第三方程序,传入路径时确保路径准确即可,只要不带
-n参数,就不会重复启动新实例。 - 系统自带应用(比如App Store)默认存放在
/Applications目录下,不需要手动写全路径,直接传应用名给-a参数即可自动检索定位,避免路径书写错误。
内容的提问来源于stack exchange,提问作者signmeupnow
相关产品推荐
相关产品推荐

