Usaría la instrucción bash eval y haría que el script de python generara el código de shell
niño.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
padre.sh
#!/bin/bash
eval `./child.py`
No es posible, para ningún proceso secundario, cambiar el entorno del proceso principal. Lo mejor que puede hacer es generar declaraciones de shell en la salida estándar que luego obtiene, o escribirlas en un archivo que obtiene en el padre.
Ningún proceso puede cambiar su proceso principal (o el entorno de cualquier otro proceso existente).
Sin embargo, puede crear un nuevo entorno creando un nuevo shell interactivo con el entorno modificado.
Tiene que generar una nueva copia del shell que use el entorno actualizado y tenga acceso a la entrada estándar, la salida estándar y la salida estándar, y haga su baile de reiniciación.
Debe hacer algo como usar subprocess.Popen para ejecutar /bin/bash -i
.
Entonces, el shell original ejecuta Python, que ejecuta un nuevo shell. Sí, tienes muchos procesos en ejecución. No, no es tan malo porque el shell original y Python realmente no están haciendo nada excepto esperar a que termine el subshell para que también puedan salir limpiamente.