2016-09-16 53 views
0

我在C#應用程序中嵌入IronPython解釋器來執行Python腳本。該腳本使用os.environ['VAR1']嵌入IronPython並覆蓋環境變量

評估特定環境變量VAR1我需要在執行腳本之前暫時更改VAR1的值。爲此,我撥打

Environment.SetEnvironmentVariable("VAR1", "NEW_VALUE"); 

在C#代碼中。不幸的是,這是行不通的。 Python腳本仍然「看到」舊值VAR1(託管C#應用程序啓動時的值)。

下面是一個完整的示例代碼:

 Environment.SetEnvironmentVariable("VAR1", "NEW_VALUE"); 
     var engine = Python.CreateEngine(); 
     engine.SetSearchPaths(new string[] { @"c:\Program Files (x86)\IronPython 2.7\Lib\" }); 
     var ms = new MemoryStream(); 
     engine.Runtime.IO.SetOutput(ms, Encoding.Unicode); 

     var script = engine.CreateScriptSourceFromString("import os\nprint os.environ['VAR1']"); 
     script.Execute(); 

     System.Windows.Forms.MessageBox.Show(Encoding.Unicode.GetString(ms.ToArray())); 

我的理解是,IronPython的引擎在同一進程中的C#主機應用程序運行。如果這是正確的,Python代碼和C#代碼如何看到不同的環境變量?

是否有更好的(工作)方式爲Python腳本設置環境變量?

回答

0

好了,我還是不知道爲什麼上面的代碼不工作,但可以通過執行Python代碼,設置變量執行真正的代碼只需設置在Python環境的環境變量之前

engine.CreateScriptSourceFromString("import os\nos.environ['VAR1'] = 'NEW_VALUE'").Execute(); 
var CodeIReallyWantToRun = engine.CreateScriptSourceFromFile(...); 
CodeIReallyWantToRun.Execute();