You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用subprocess模块编写Python程序实现应用打开与关闭的问题求助

解决Safari启动后无法通过subprocess关闭的问题

嘿,我来帮你分析下问题出在哪,以及怎么解决~

你遇到的核心问题是:open -a safari这个命令本身只是个“启动器”进程——它的工作就是帮你启动Safari应用,一旦Safari成功启动,open进程就会立刻退出。所以你用subprocess.run或者Popen拿到的p对象,对应的是已经结束的open进程,而不是正在运行的Safari进程。这时候调用p.terminate()自然毫无效果,因为目标进程早就不在了。

Atom的Terminus插件和这个问题没关系,不用怀疑它~

下面给你两个可行的解决方案:

方案一:直接启动Safari的可执行文件

跳过open命令,直接调用Safari本身的可执行程序路径,这样Popen返回的就是Safari的进程实例,后续就能正常用terminate()关闭它了:

import time
import subprocess

# macOS下Safari的默认可执行文件路径
safari_path = '/Applications/Safari.app/Contents/MacOS/Safari'
# 启动Safari
p = subprocess.Popen([safari_path])
time.sleep(3)
# 关闭Safari
p.terminate()

方案二:通过进程名关闭Safari

如果你还是想用open命令启动,那可以通过查找Safari的进程ID(PID),再用pkill命令关闭它:

import time
import subprocess

# 用open启动Safari
subprocess.run(['open', '-a', 'safari'])
time.sleep(3)
# 根据进程名关闭所有Safari进程
subprocess.run(['pkill', 'Safari'])

⚠️ 注意:pkill Safari会关闭所有名为Safari的进程,如果当时有多个Safari窗口在运行,都会被一起关掉。

这样就能实现你想要的“打开-延迟-关闭”的流程啦~

内容的提问来源于stack exchange,提问作者Ryan B. Jawad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:37:45