J'utiliserais l'instruction bash eval et le script python produirait le code shell
enfant.py :
#!/usr/bin/env python
print 'FOO="A_Value"'
parent.sh
#!/bin/bash
eval `./child.py`
Il n'est pas possible, pour un processus enfant, de modifier l'environnement du processus parent. Le mieux que vous puissiez faire est de générer des instructions shell sur stdout que vous sourcez ensuite, ou de les écrire dans un fichier que vous sourcez dans le parent.
Aucun processus ne peut modifier son processus parent (ou tout autre environnement de processus existant).
Vous pouvez cependant créer un nouvel environnement en créant un nouveau shell interactif avec l'environnement modifié.
Vous devez générer une nouvelle copie du shell qui utilise l'environnement mis à niveau et a accès aux stdin, stdout et stderr existants, et effectue sa danse de réinitialisation.
Vous devez faire quelque chose comme use subprocess.Popen pour exécuter /bin/bash -i
.
Ainsi, le shell d'origine exécute Python, qui exécute un nouveau shell. Oui, vous avez beaucoup de processus en cours d'exécution. Non, ce n'est pas trop grave car le shell d'origine et Python ne font rien d'autre que d'attendre que le sous-shell se termine pour qu'ils puissent également se terminer proprement.