【问题标题】:Mac App on El Capitan with Python Child Process带有 Python 子进程的 El Capitan 上的 Mac 应用程序
【发布时间】:2016-11-09 07:08:26
【问题描述】:

我一直在构建一个 Mac 应用程序,其架构的一部分是它衍生出一个 python 子进程来在后台索引一些文件(有更简单的库可用于为 python 建立索引)。它通过直接执行 python 文件来启动 python。然后,父 Mac 应用程序和子 python 进程通过套接字相互通信。

将我的 MacBook 升级到 El Capitan 后,我遇到了这里描述的防火墙问题:How to allow Python.app to firewall on Mac OS X?

当我第一次在 El Capitan 上打包我的应用程序并在本地部署它时,我得到了相同的“你希望应用程序 'Python.app' 接受传入的网络连接吗”对话框。我按照那篇文章中的步骤为自己解决了这个问题。但是,我的最终目标是将我的应用分发给其他用户,在这种情况下,我不希望他们像帖子建议的那样禁用系统完整性保护以使我的应用正常工作。

我知道我可以尝试将索引功能集成到 Mac 应用程序本身中,但是还有哪些其他可能的解决方案来解决这个问题?我如何允许 python 进程通过套接字进行通信,而不需要用户或我自己进行复杂的代码签名过程?

【问题讨论】:

    标签: python macos sockets


    【解决方案1】:

    也许您可以通过从标准输入读取和/或写入标准输出来让您的 Python 进程与父进程通信,而不是使用套接字?这样可以避免与防火墙的任何交互。

    【讨论】:

    • 我曾考虑过这个解决方案,但不太确定当 python 子进程抛出异常之类的东西时会发生什么,是否有一种干净的方式可以通过 stdin/stdout 进行通信而不必担心例外。在这种情况下,如果无法将非结构化内容打印到标准输出,我将如何调试(因为它需要符合某种协议)。
    • 异常将与以前一样工作(即它们不会通过文件描述符传播)。在父进程中调试的工作方式与以前相同。在子进程中调试有点棘手,因为现在它的标准输出输出到父进程而不是你的终端;但是您可以选择让父进程打印从子进程接收到的任何文本,或者让子进程选择将调试信息记录到文件中,然后您可以通过 tail -f (或等)监控该文件跨度>
    猜你喜欢
    • 2016-06-24
    • 2019-02-03
    • 2016-06-29
    • 2015-12-31
    • 2016-10-10
    • 1970-01-01
    • 2016-10-12
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多