Das funktioniert jetzt. Verstehe ich das richtig:
- Erzeuge die Pipe und setze danach die Flags des Pipeendes `childs_end`, welches ja ein Filedescriptor ist, neu
- Verwende hierfür die bisherigen Flags + das neue Flag `FD_CLOEXEC`, welches den fd schliessen soll, wenn eine exec-Operation *erfolgreich* aufgerufen wurde
- Bei erfolgreichem `exec` wird also die Pipe geschlossen und hat nur einen leereren String im nun lesbaren Pipeende des Kindes
- Bei Misserfolg schreibt meine `os.read()`-Anweisung die Exception rein
- `os._exit()` würde dann das Kind schliessen und wird auch nur dann erreicht, wenn `os.execv()` abbrechen musste
- Jetzt schliesst der Elternprozess das Pipeende des Kindes: Warum eigentlich? Sollte das nicht besser im Block des Kindes kurz vor `os._exit()` stehen? Denn im Erfolgsfall hat man doch das Flag, das sich um's Schliessen kümmert. Außerdem könnte der Elternprozess dem Kind doch dann die Pipe vor der Nase zumachen, bevor dieses etwas reinschreiben kann, oder nicht?
- Danach wird jedenfalls geprüft, ob Daten da sind. Ich nehme an, `os.read()` wartet ab, bis ein leerer String kommt oder eben die Exception
- Wenn der String befüllt ist, wartet man auf noch die Beendigung des Kindes (das ja dann einen Fehler gehabt haben muss), weil man - so denke ich mal - sicher sein will, dass keine Daten mehr nachkommen und holt sich schließlich die Daten mit `pickle`.
Ich bohre deshalb so nach, weil ich den Ablauf meines Programms halt schon verstehen will.