Použil bych příkaz bash eval a nechal python skript vypsat kód shellu
child.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
parent.sh
#!/bin/bash
eval `./child.py`
Pro žádný podřízený proces není možné změnit prostředí nadřazeného procesu. Nejlepší, co můžete udělat, je vygenerovat příkazy shellu na stdout, které pak získáte jako zdroj, nebo je zapsat do souboru, který je zdrojem v nadřazeném souboru.
Žádný proces nemůže změnit svůj nadřazený proces (nebo prostředí jakéhokoli jiného existujícího procesu).
Můžete však vytvořit nové prostředí vytvořením nového interaktivního prostředí s upraveným prostředím.
Musíte vytvořit novou kopii shellu, který používá upgradované prostředí a má přístup ke stávajícímu stdin, stdout a stderr a provede jeho reinicializační tanec.
Pro spuštění /bin/bash -i
musíte udělat něco jako použití subprocess.Popen .
Původní shell tedy spouští Python, který spouští nový shell. Ano, běží vám spousta procesů. Ne, není to tak špatné, protože původní shell a Python ve skutečnosti nedělají nic kromě čekání na dokončení subshell, aby mohli také čistě ukončit.