bash eval ステートメントを使用して、Python スクリプトにシェル コードを出力させます
child.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
親.sh
#!/bin/bash
eval `./child.py`
子プロセスが親プロセスの環境を変更することはできません。できる最善の方法は、シェル ステートメントを stdout に出力してからソースするか、親でソースするファイルに書き込むことです。
親プロセス (または他の既存のプロセスの環境) を変更するプロセスはありません。
ただし、変更された環境で新しいインタラクティブ シェルを作成することにより、新しい環境を作成できます。
アップグレードされた環境を使用し、既存の stdin、stdout、および stderr にアクセスし、その再初期化ダンスを実行するシェルの新しいコピーを生成する必要があります。
subprocess.Popen を使用して /bin/bash -i
を実行するようなことをする必要があります .
したがって、元のシェルは Python を実行し、Python は新しいシェルを実行します。はい、多くのプロセスが実行されています。元のシェルと Python は、サブシェルが終了するのを待って正常に終了できるようにする以外には何もしていないため、それほど悪くはありません。