2012-03-09 5 views
2

Pythonで書かれたテストハーネスを実行しています。このテストハーネスを通してテストを実行する前に、変数をエクスポートした後にテストハーネスを呼び出すシェルスクリプトを通していくつかの環境変数をエクスポートしています。ハーネスが現れたら、変数が環境内にあるかどうかをチェックし、env変数の値に応じて操作を行います。終了時でもPythonスクリプトに保存される環境変数

しかし、テストが実行された後、次回から環境変数の値がクリアされないと考えられます。シェルスクリプトで設定されていなくても値を取得します。

明示的に設定されている場合、ハーネスは新しい値を選択しますが、次回クリアすると最初の実行で設定された値が再度取り込まれます。

すべてのテストの実行後に "del os.environ ['var']"コマンドを使用して変数を消去しようとしましたが、問題を解決できませんでした。誰もがなぜこれらの価値が保存されているのか知っていますか?

これらの変数は、 'env' unixコマンドのように設定されていません。テストハーネスの中には値が示されています。 env変数のいずれも、任意のテキストファイルに値を格納しません。

答えて

1

サブシェルは、親から継承した変数を変更できますが、その変更は親には影響しません。
新しいサブシェルが開始されたときに、親からエクスポートされた変数が表示されます。変数はdel os.environ['var']によって設定されていませんが、親のこの変数の値は変わりません。

+0

しかし、Pythonスクリプトを呼び出す前と戻った後にシェルスクリプトに 'env'コマンドを置くと、それらの変数が設定されていることは表示されません。 – writetonikhil

+0

これは、env変数が親に設定されていないが、子で 'set'と見なされることを意味します。 – writetonikhil

+0

あなたがサブシェルで行うすべては、その親に影響しません。 – kev

1

pythonプロセスは、それを起動した親シェルプロセスの環境に影響を与えることはできません。親シェルを持っている場合、そのシェル自体が/を変更するまで、その環境は保持されます。

しかし、bashスクリプトは次のように、唯一の子スクリプトの環境変数を設定することができます。

export OPTIONS=parent 
OPTIONS=child python child.py 
echo $OPTIONS 

これが「親」ではなく、「子」をエコーし​​ますが、PythonのプロセスがOPTIONS=childが表示されます。あなたはセットアップを非常にはっきりと記述していませんが、おそらくこれが助けになるでしょうか?

関連する問題