2015-10-14 30 views
0

我想在shell中設置環境變量,然後在後續命令中使用這些變量;但是在shell模式下使用subprocess.call()不會保留環境變量設置。我如何通過子流程獲得所需的功能。未通過後續子進程調用保存環境變量(Python)

這裏是我有一個問題,一個簡單的例子:

import subprocess 
#Method 1 
subprocess.call('VARNAME1=\"MyValue1\"', shell=True) 
subprocess.call("echo $VARNAME1", shell=True) 

#Method 2 
subprocess.call('VARNAME2=\"MyValue2\"; echo $VARNAME2', shell=True) 

輸出:

> 
> MyValue2 

預期輸出:

> MyValue1 
> MyValue2 

我將不能串命令與「;」就像我在第二種方法中所做的那樣。

感謝您的幫助。

+3

subprocess.call'的'每次運行運行一個新的外殼。他們不能以這種方式分享。如果您需要爲衍生shell設置環境變量,請使用'env' kwarg到'call'函數。 –

+0

使用PIPE是將後續命令傳遞給同一個shell進程的最佳方式嗎? – digitaLink

+0

嗯?沒有'PIPE'不會讓你在以後的任何命令。哦,我想你可以將標準輸入「PIPE」輸入到「交互式」shell會話並通過標準輸入發送命令...是的。這對我來說似乎非常難看。你的shell命令是否設置了以後shell調用所需的變量,或者它們是否都共享共同的外部設置的環境變量? –

回答

0

設置環境變量,你必須使用os.environ陣列

例如:

import os  
os.environ['VARNAME1'] = "My value" 
+0

這就是python腳本本身的環境。然後由python腳本運行的任何進程繼承,但是'subprocess.call'有一個* explicit *參數來覆蓋它,併爲衍生進程使用自定義環境。 'env' kwarg。 –