Userei l'istruzione bash eval e farei in modo che lo script python emetta il codice della shell
child.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
genitore.sh
#!/bin/bash
eval `./child.py`
Non è possibile, per nessun processo figlio, modificare l'ambiente del processo padre. Il meglio che puoi fare è inviare le istruzioni della shell a stdout che poi provieni, o scriverle in un file che tu provi nel genitore.
Nessun processo può modificare il proprio processo padre (o qualsiasi altro ambiente di processo esistente).
Puoi, tuttavia, creare un nuovo ambiente creando una nuova shell interattiva con l'ambiente modificato.
Devi generare una nuova copia della shell che utilizza l'ambiente aggiornato e ha accesso a stdin, stdout e stderr esistenti, e fa il suo ballo di reinizializzazione.
Devi fare qualcosa come usare subprocess.Popen per eseguire /bin/bash -i
.
Quindi la shell originale esegue Python, che esegue una nuova shell. Sì, hai molti processi in esecuzione. No, non è poi così male perché la shell originale e Python in realtà non stanno facendo altro che aspettare che la subshell finisca in modo che anche loro possano uscire in modo pulito.