news 2026/9/11 13:55:57

Platypus:把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Platypus:把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用

Platypus:把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用

【免费下载链接】PlatypusCreate native macOS applications from command line scripts.项目地址: https://gitcode.com/gh_mirrors/pl/Platypus

每次写完脚本,最后一步往往最闹心:想递给同事,他不会往终端里敲命令;自己又懒得学 GUI 开发。Platypus 解决的就是这一步——把 shell 脚本或 Python、Perl、Ruby 脚本包装成一个可双击启动的 macOS .app 应用,全程不写一行 GUI 代码。

脚本和应用之间,隔着一整套应用包结构

传统做法是把脚本变成"正规 Mac 应用":先搞懂应用包(bundle)的目录结构,手写 Info.plist,再处理可执行文件和窗口,折腾下来一两天就没了,而你的脚本可能只有一屏。

Platypus 把这条路径压缩成一次包装操作。它 2003 年首次发布,维护了二十多年,用 Objective-C/Cocoa 编写,以 BSD 3-Clause 协议开源。你不需要读 Objective-C,也不需要理解 Cocoa,生成的应用却能像其他任何 Mac 应用一样从 Finder 或 Dock 启动。

Platypus 的工作机制:给脚本套一层 .app 壳

原理并不神秘。macOS 的 .app 本质上就是一个有固定结构的文件夹,双击启动时执行的其实是 Contents/MacOS 里的二进制。

Platypus 生成的正是这样一个 bundle,只不过里面的二进制是一个通用的瘦可执行文件:它读取 AppSettings.plist 里的配置,运行你的脚本,再把输出送到你选定的界面上。脚本和随附文件统一放进 Contents/Resources 目录。

所以生成的应用体积小、启动快——它只携带脚本本身和少量界面资源。这个通用二进制的源码在仓库的 ScriptExec/SEController.m 里,通读一遍就能理解生成应用的完整运行过程。

用 Platypus 三步生成第一个应用

不用编译也能用:官方发布版约 3.5 MB,支持 macOS 11 及以上、Apple Silicon 和 Intel 两种架构。如果习惯自己构建,一条命令即可(需要 Xcode 构建工具):

git clone https://gitcode.com/gh_mirrors/pl/Platypus cd Platypus make build_unsigned

产物会出现在products目录中。

界面操作只有三步:

  1. 打开 Platypus,点Select选脚本,也可以直接把脚本文件拖进窗口。打开脚本后,它会根据文件后缀和 shebang 行自动识别解释器。
  2. 输入应用名称,选择界面类型,按需更换图标、填写标识符和作者信息。
  3. Create,指定目标位置,一个 .app 就生成了。

Platypus 主界面:选好脚本、设置名称与界面后,右侧 Create 即可生成应用

六种界面:给脚本配一张合适的脸 ✨

同一个脚本,配哪种脸比想象中重要。Platypus 提供 6 种界面类型,各自对应一类典型用法:

  • None:完全无窗口,纯后台跑,脚本输出重定向到 stderr,适合登录项、定时任务。
  • Progress Bar:执行时显示进度条窗口,脚本可以实时更新百分比,适合耗时任务。
  • Text Window:把脚本输出逐行显示在窗口里,适合日志、报告类脚本。注意它不是可交互终端。
  • Web View:输出按 HTML 渲染。页面基准目录就是应用的 Resources,把图片和样式文件加进 Bundled Files 后可以用相对路径引用。
  • Status Menu:在菜单栏放一个图标,每次点击都会运行脚本,输出行变成菜单项;选中某一项后脚本再跑一次,并收到该项的标题作为参数。
  • Droplet:一个提示拖放的窗口,文件丢上来后逐个交给脚本处理。

Web View 界面:脚本输出的 HTML 直接在 WebView 窗口中渲染

让脚本驱动界面:拖文件进来、进度走出去

应用跑起来后还有两个问题:输入怎么进,进度怎么出。Platypus 的方案是命令行参数加脚本打印的约定行。

输入方向:勾选Accept dropped items后,应用就能接收拖放到窗口或 Dock 图标上的文件与文本——文件路径作为参数传给脚本,文本片段写入 stdin。Drop Settings里可以按文件后缀或 UTI 限定接受的类型,文件夹就加public.folder。还可以把应用注册成 URI scheme 处理器或系统服务。

Args 面板:给解释器和脚本分别指定参数,例如 bash 加 -l 以登录 shell 方式运行

输出方向:脚本只要打印几行约定文本。PROGRESS:75更新进度条,ALERT:标题|内容弹警告框,NOTIFICATION:标题|内容推送通知中心,REFRESH清空输出缓冲,QUITAPP结束应用。随附资源加进Bundled Files列表即可,它们会被复制进 Resources,脚本从工作目录直接就能取到。

Drop Settings:按 UTI 或后缀限定应用接受的拖放类型

一行终端命令:Platypus 命令行工具

想把应用生成放进构建流水线,就不必点界面。Platypus 附带同名命令行工具,在Settings里一键安装(二进制装到/usr/local/bin/platypus),装完后它完全独立于图形界面运行。

生成一个应用只需一行:

platypus -a "图片压缩器" -o "Droplet" -i icon.icns resize.py

更省事的是,图形界面里的Show Shell Command会把当前设置翻译成等价的命令行,直接复制进脚本。你也可以把整套设置存成 .platypus 配置文件,用-P参数加载后批量生成。

命令行工具安装位置:二进制、ScriptExec、nib 与 man 页都放在 /usr/local 下

适用边界:Platypus 做不了什么

官方把边界写得很清楚:它不是 GUI 开发环境,也不能用来做复杂交互的应用。要做后者,还是得学原生 API;Platypus 只负责把"脚本到可双击应用"这一小段路走快。

几个常被问到的问题,直接说:

生成的应用能拿到别的 Mac 上用吗

可以,应用本身只是个 bundle。但脚本在目标机器上必须有对应解释器,Python、Perl、Ruby、shell 这些预置语言在 macOS 上通常都自带。

脚本里能弹输入框问用户要信息吗

不能直接问。文本窗口不是可交互终端,stdin 是断开的,sudo或 Python 的input()会直接挂住。要提问就借osascript弹 AppleScript 对话框,或者让用户通过拖放传参。

首次运行被 GateKeeper 拦住了

生成的应用默认不签名,macOS 会提示确认。可以右键选择"打开"信任它,正式分发前用codesign自己签一遍。

需要 Xcode 才能用吗

不需要。Xcode 构建工具只在从源码编译,或者你想压缩 nib 文件时才用到。

下一步与延伸资源 💡

想继续深入,按顺序做三件事:

  1. 从 Profiles 菜单的Examples子菜单打开示例。仓库 Examples/ 目录里有 18 个 .platypus 配置,涵盖拖放图片缩放、状态栏菜单、URI scheme 处理器等场景,逐个拆开看最直观。
  2. 通读 Documentation/Documentation.md,六种界面的全部行为、约定行语法和常见问题都在里面。
  3. 准备自动化时先装命令行工具,再对照 CLT/platypus_clt.m 的源码,把图形界面里的每一步设置变成可重复执行的命令。

【免费下载链接】PlatypusCreate native macOS applications from command line scripts.项目地址: https://gitcode.com/gh_mirrors/pl/Platypus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 5:45:47

社保大数据竞赛实战:Python与LightGBM全流程

简介:在大数据时代,机器学习技术广泛用于政务数据挖掘,其中基于梯度提升树的LightGBM以高效训练和类别特征支持成为表格数据建模的主流。真实业务场景中的数据往往体量大、维度杂,且存在严重类别不平衡,如何通过特征工…

作者头像 李华
网站建设 2026/8/30 13:13:56

基于RAG的408考研本地化问答系统:从架构到调优实践

简介:检索增强生成(RAG)是一种将外部知识库与生成式大模型结合的框架,通过先检索再生成的方式显著提升回答的准确性与可溯源性。其核心原理是把文档切块、向量化存入数据库,在提问时召回相关片段并交由模型组织答案。R…

作者头像 李华
网站建设 2026/8/30 7:22:32

具身智能落地指南:从Demo到生产线的关键跨越与工程实践

一场技术路演上,具身智能机器人轻巧地完成叠衣、拧瓶盖、抓取零件,观众席一再响起掌声。但是当镜头切回真实的汽车工厂、物流仓库或者电子装配车间,情况往往完全不同:来料位置是乱的,光线是变的,节拍是按秒…

作者头像 李华