2013-04-22 165 views
0

我正在使用SCONS構建工具。
我無法使用在python腳本中初始化的環境變量。
如何在python腳本中設置環境變量

在我的項目中用戶可以更改一些變量以使用編譯器。

對於我們有2個文件。

  • Config.py
  • Sconstruct

Config.py是爲一切都像變量包括目錄,CFLAGS,CPPDEFINES等,所以,在這裏我們可以設置一些變量。我需要在Sconstruct文件中使用這些變量。在config.py我設置了一個變量,如下所示

SCONS_INC = "Include files" 
os.environ["SCONS_INC"] = SCONS_INC 

我需要在Sconstruct文件中使用這些變量。代碼是

env["CPPPATH"] = os.environ["SCONS_INC"] 

但是我收到一個錯誤,像未定義的變量SCONS_INC。

如何做到這一點?

+0

你在使用什麼操作系統/環境?我在做Sconstruct文件中的 – 2013-04-22 09:47:17

+0

。 env =環境(ENV = os.environ) – 2013-04-22 09:49:23

+0

Windows/Linux/Mac等。 – 2013-04-22 09:55:47

回答

3

SCons的默認情況下不使用調用環境,這是爲了確保您能重現構建無論哪個配置您的環境有。

的環境變量下的關鍵ENV存儲在scons的環境中,所以你訪問一般的環境變量是這樣的:

env = Environment() 
variable = env['ENV']['SomeVariable'] 
env['ENV']['SomeVariable'] = SomeValue 

我明白你的問題,你好像需要使用內的python腳本設置變量SCons的。要做到這一點,你需要使用你描述的兩種方法將它們轉移。

env = Enviroment() 
python_variable = os.environ['SomeVariable'] 
env['ENV']['SomeVariable'] = python_variable 

我不過也許建議控制生成的其他方式,所以你不必去與傳輸環境變量的麻煩。恕我直言,使用參數更簡單。這些參數只是由scons的的調用生成一個字典,所以當你說:

scons -D some_argument=blob 

你可以通過簡單地得到這樣的說法:

some_variable = ARGUMENTS["some_argument"] 

當然,我不知道爲什麼你需要環境變量,所以這可能與你完全無關。

+0

嗨感謝您的回答。我編輯了我的問題。 你能告訴我如何在Config.py中初始化變量 – 2013-04-22 11:36:12

0

我曾經有過類似的需求,編譯器正在尋找一個沒有設置的Env變量。我能解決這個問題如下:

env = Environment() 
env['ENV']['THE_VARIABLE'] = 'SomeValue' 
+0

我正在將Sconstruct文件中的編譯器環境設置爲 env =環境(ENV = os.environ) 與上述情況相同。 – 2013-04-22 10:55:43

+0

@SrinivasReddy我正在做的是設置沒有已經存在的Env Vars。所以,我有效地將一個變量附加到環境中。 – Brady 2013-04-22 12:03:57