嵌入IronPython并覆盖环境变量

时间:2016-09-16 15:58:50

标签: c# environment-variables ironpython

我在C#应用程序中嵌入了一个IronPython解释器来执行Python脚本。该脚本使用VAR1

评估特定的环境变量os.environ['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脚本设置环境变量?

1 个答案:

答案 0 :(得分:0)

好吧,我仍然不知道为什么上面的代码不起作用,但是可以通过执行设置变量 BEFORE 执行真实代码:

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