2013-01-11 67 views
3

可能重複:
Is it possible to change the Environment of a parent process in python?os.environ [ 'HTTP_PROXY']不工作

我使用Python 2.4.3。我試圖設置我的http_proxy變量。請看下面的例子,請讓我知道什麼是錯的。 該變量是根據python設置的,但是當我退出交互模式時。 http_proxy變量仍未設置。我已經在腳本中嘗試過,並且還嘗試了其他變量,但是我得到了相同的結果。操作系統中沒有設置變量。

Python 2.4.3 (#1, May 1 2012, 13:52:57) 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.environ['http_proxy']="abcd" 
>>> os.system("echo $http_proxy") 
abcd 
0 
>>> print os.environ['http_proxy'] 
abcd 
>>> 
[email protected]~$ echo $http_proxy 

[email protected]~$ 
+5

來改變環境python將使用的環境:一旦程序停止運行,在Python腳本/ shell中設置變量不會影響環境 - 它隻影響程序的環境,這是該計劃的子女。 – birryree

+2

我認爲環境標誌只適用於子過程。 – user176581

+1

Env變量自動從超級殼體傳輸到子殼體,而不是相反。在Unix上,有'export'程序可以做到這一點。 –

回答

3

當你運行這段代碼時,你設置了環境變量,它的工作範圍只在進程內。退出後(退出python的交互模式),這些環境將會消失。因爲你的代碼「os.system(」echo $ http_proxy「)」表示,如果你想使用這些環境變量,你需要在進程中運行外部程序。這些變量將被轉移到子進程中並且可以被它們使用。

+0

歡迎來到SO ,好的回答:) KUGW – Infinity

0

環境變量不是「設置的全局數據庫」;在這裏設置環境在那裏沒有任何影響。

這是一個例外,調用其他程序的程序可以爲其子程序提供不同的環境。

在shell,當你鍵入

[~/]$ FOO=bar baz 

你告訴外殼調用程序baz一些額外的環境FOO

您也可以在python中做到這一點,但更改os.environ不會產生任何影響。該變量只包含一個普通的python字典,與任何開始的環境。您可以通過將env的另一個值傳遞給subprocess.Popen

+0

那麼解決這個問題的方法是?我試圖在程序中設置http_proxy變量,並從同一程序發出出站http請求 – user1970157