gpt4 book ai didi

macos - 组合 GUI 和命令行 OS X 应用程序

转载 作者:行者123 更新时间:2023-12-04 19:13:54 26 4
gpt4 key购买 nike

是否可以创建一个可以从 *nix 命令行严格运行(使用标准输入/标准输出,从终端控制台或通过 ssh 等)运行的单个 Mac OS X 应用程序,但也可以从应用程序图标和使用 Mac GUI 进行所有用户交互(不需要终端)?如果是这样,怎么做?

我已经可以使用两个可执行文件来实现类似的功能,一个是 GUI 前端,另一个是使用管道、套接字、共享内存或 Applescript(等)进行通信。这个问题是我是否可以使用单个可执行文件和单个应用程序进程空间来做到这一点。

有没有办法在不将新的命令行参数传递给命令行可执行文件的情况下做到这一点? (因为存在与使用命令行应用程序相关的遗留问题)。

最佳答案

我相信,您正在寻找的是一种确定您是从 GUI 还是命令行启动的方法。一种简单的方法是获取您的父进程标识符。如果您是 GUI 进程,您将由 launchd(用户 session launchd)启动。如果您是命令行,那么 shell 或脚本已经启动了您(无论如何,不​​是启动)。

现在,如何做到这一点 - 一个简单的方法是使用 proc_info 系统调用 (#336),它由 libproc 方便地包装(检查 <libproc.h> 。具体来说,您需要 proc_bsdinfo(参见 <sys/proc_info.h>) pbi_ppid 字段来指定您的父级(并且父级的 pbi_comm 会告诉您它的名称 - 以查看它是否已启动)。您可以通过在进入 NSApplicationMain 之前检查您的父级来实现命令行功能。

(与其他答案一样,您的二进制文件最终会出现在您的 .app/Contents/MacOS/<binary> 中,所以是的,符号链接(symbolic link)是有意义的)

关于macos - 组合 GUI 和命令行 OS X 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com