2016-09-16 51 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();