Ich habe eine Mac App gebaut und ein Teil seiner Architektur ist, dass es einen Python Kindprozess ausspioniert, um einige Dateien im Hintergrund zu indizieren (es gibt einfachere Bibliotheken für die Indexierung für Python). Es startet den Python durch direktes Ausführen der Python-Datei. Die Eltern-Mac-App und der Kind-Python-Prozess kommunizieren dann über Sockets miteinander.Mac App auf El Capitan mit Python Kind Prozess
Nach der Aktualisierung meines MacBook auf El Capitan wurde ich mit dem hier beschriebenen Firewall-Problem konfrontiert: How to allow Python.app to firewall on Mac OS X?.
Als ich meine Anwendung packte und sie zum ersten Mal lokal auf El Capitan implementierte, bekam ich dasselbe "Soll die Anwendung 'Python.app' eingehende Netzwerkverbindungen akzeptieren" -Dialog. Ich habe die Schritte in diesem Beitrag ausgeführt, um das Problem für mich selbst zu lösen. Mein Ziel ist es jedoch, meine App an andere Benutzer zu verteilen. In diesem Fall würde ich nicht möchten, dass sie den Systemintegritätsschutz deaktivieren, wie der vorgeschlagene Beitrag, damit meine App funktioniert.
Ich weiß, ich könnte versuchen, die Indizierung Funktionalität in die Mac App selbst zu integrieren, aber was sind andere mögliche Lösungen für dieses Problem? Wie würde ich dem Python-Prozess ermöglichen, über Sockets zu kommunizieren, ohne dass die Benutzer oder ich selbst einen komplizierten Code-Signing-Prozess durchlaufen müssen?
Ich hatte über diese Lösung nachgedacht, aber ich war mir nicht sicher, was passiert, wenn der Python Child-Prozess Ausnahmen auslöst und diese Art von Dingen, gibt es eine saubere Möglichkeit, über stdin/stdout zu kommunizieren, ohne sich um Ausnahmen kümmern zu müssen. Und wie würde ich in diesem Fall debuggen ohne die Fähigkeit, unstrukturierte Sachen auf stdout zu drucken (da es einer Art Protokoll entsprechen muss). –
Ausnahmen funktionieren genauso wie zuvor (d. H. Sie verbreiten sich nicht durch Dateideskriptoren). Das Debuggen im übergeordneten Prozess funktioniert genauso wie zuvor. Das Debugging im Child-Prozess ist ein wenig komplizierter, da jetzt die Ausgabe von stdout an den übergeordneten Prozess und nicht an das Terminal weitergeleitet wird. Sie können jedoch eine Option für den übergeordneten Prozess zum Drucken von Text, der vom untergeordneten Prozess empfangen wird, oder eine Option für den untergeordneten Prozess zum Protokollieren von Debuginformationen in eine Datei verwenden, die Sie dann mit tail -f (oder usw.) überwachen können. –