2016-07-07 78 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(或其他) –

相關問題