2012-03-09 167 views
2

我正在運行用Python編寫的Test Harness。在通過此測試工具運行測試之前,我通過一個在導出變量後調用測試工具的shell腳本導出一些環境變量。當線束出現時,它會檢查變量是否在環境中,並根據env變量中的值進行操作。甚至在退出後,Python腳本中的環境變量仍然保留

然而,在測試執行後,我認爲環境變量值在下次沒有被清除,即使這些值沒有通過shell腳本設置,它也會得到這些值。

如果它們被明確設置,線束將拾取新值,但如果我們下次清除它,它會再次拾取第一次運行中設置的值。

我試過在每次測試執行後都使用「del os.environ ['var']」命令清除變量,但這並沒有解決問題。有誰知道爲什麼這些價值得到保留?

在shell上,這些變量沒有按照'env'unix命令設置。它只是在測試工具中顯示值。沒有一個env變量將它們的值存儲在任何文本文件中。

回答

1

子shell可以更改它從父級繼承的變量,但子級所做的更改不會影響父級。
當一個新的子shell啓動時,其中從父項導出的變量是可見的。該變量未被del os.environ['var']取消設置,但該變量在父級中的值保持不變。

+0

但是,如果我們在調用python腳本之前將'env'命令放在shell腳本中並返回後,它不會顯示這些變量已設置。 – writetonikhil 2012-03-09 13:08:30

+0

所以這意味着env變量沒有在父項中設置,但在子項中被視爲'set'。 – writetonikhil 2012-03-09 13:15:18

+0

您在子shell中執行的所有操作都不會影響其父項。 – kev 2012-03-09 13:16:33

1

python進程不能影響啓動它的父shell進程的環境。如果你有一個父shell,除非shell自己改變它,否則它的環境將持續存在。

然而,bash腳本只能爲孩子腳本設置環境變量,像這樣:

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

這將呼應「父」,而不是「孩子」,但蟒蛇過程中會看到OPTIONS=child。你沒有很清楚地描述你的設置,但是這可能有幫助嗎?