我在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脚本设置环境变量?
答案 0 :(得分:0)
好吧,我仍然不知道为什么上面的代码不起作用,但是可以通过执行设置变量 BEFORE 执行真实代码:
engine.CreateScriptSourceFromString("import os\nos.environ['VAR1'] = 'NEW_VALUE'").Execute();
var CodeIReallyWantToRun = engine.CreateScriptSourceFromFile(...);
CodeIReallyWantToRun.Execute();