Ich bette einen IronPython-Interpreter in eine C# -Anwendung ein, um ein Python-Skript auszuführen. Das Skript wertet eine bestimmte Umgebungsvariable aus VAR1
mit os.environ['VAR1']
Einbetten von IronPython und Überschreiben von Umgebungsvariablen
Ich muss den Wert VAR1
vorübergehend ändern, bevor das Skript ausgeführt wird. Um dies zu tun, rufe ich im C# -Code
Environment.SetEnvironmentVariable("VAR1", "NEW_VALUE");
an. Leider funktioniert das nicht. Das Python-Skript "sieht" immer noch den alten Wert VAR1
(der Wert, den es hatte, als die C# -Anwendung gestartet wurde). Hier
ist ein kompletter Beispielcode:
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()));
Mein Verständnis ist, dass der Ironpython Motor läuft im selben Prozess wie die C# Host-Anwendung. Wenn dies richtig ist, wie können der Python-Code und der C# -Code verschiedene Umgebungsvariablen sehen?
Gibt es eine bessere (funktionierende) Möglichkeit, eine Umgebungsvariable für das Python-Skript festzulegen?