Ich würde die bash eval-Anweisung verwenden und das Python-Skript den Shell-Code ausgeben lassen
kind.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
parent.sh
#!/bin/bash
eval `./child.py`
Es ist für keinen untergeordneten Prozess möglich, die Umgebung des übergeordneten Prozesses zu ändern. Das Beste, was Sie tun können, ist, Shell-Anweisungen an stdout auszugeben, die Sie dann als Quelle verwenden, oder sie in eine Datei zu schreiben, die Sie in der übergeordneten Datei als Quelle verwenden.
Kein Prozess kann seinen übergeordneten Prozess (oder die Umgebung eines anderen bestehenden Prozesses) ändern.
Sie können jedoch eine neue Umgebung erstellen, indem Sie eine neue interaktive Shell mit der modifizierten Umgebung erstellen.
Sie müssen eine neue Kopie der Shell erstellen, die die aktualisierte Umgebung verwendet und Zugriff auf die vorhandenen stdin, stdout und stderr hat und ihren Reinitialisierungstanz durchführt.
Sie müssen so etwas wie use subprocess.Popen tun, um /bin/bash -i
auszuführen .
Die ursprüngliche Shell führt also Python aus, das eine neue Shell ausführt. Ja, Sie haben viele Prozesse am Laufen. Nein, es ist nicht so schlimm, weil die ursprüngliche Shell und Python nicht wirklich etwas tun, außer darauf zu warten, dass die Subshell fertig wird, damit sie auch sauber beendet werden können.