2016-07-07 52 views
0

我一直在建设一个苹果机应用程序,它的一部分架构是它分离出一个python子进程来索引背景中的一些文件(有更简单的库用于索引蟒蛇)。它通过直接执行python文件启动python。父Mac应用程序和子python进程然后通过套接字相互通信。埃尔卡皮坦与Python子进程的Mac应用程序

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

当我打包我的应用程序并在El Capitan首次本地部署它时,我得到了相同的“你想让应用程序'Python.app'接受传入的网络连接”对话框。我按照该帖子中的步骤为自己解决了这个问题。不过,我的最终目标是将我的应用分发给其他用户,在这种情况下,我不希望他们通过禁用系统完整性保护(如完成后使用我的应用的帖子)。

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

回答

0

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

+0

我曾考虑过这个解决方案,但并不太确定当python子进程抛出异常和那种东西时会发生什么,是否有一种干净的方式通过stdin/stdout进行通信而不用担心异常。在这种情况下,我将如何进行调试,而无法将非结构化的东西打印到标准输出(因为它需要符合某种协议)。 –

+0

异常将像以前一样工作(即,它们不会通过文件描述符传播)。父进程中的调试与以前一样工作。在子进程中调试有点棘手,因为现在它的标准输出转到父进程而不是你的终端;但是您可以选择让父进程打印它从子进程收到的任何文本,或者为子进程提供一个选项以将调试信息记录到文件,然后可以通过尾部-f(或其他) –

相关问题