2016-09-16 14 views
0

Pythonスクリプトを実行するために、IronPythonインタプリタをC#アプリケーションに埋め込みました。スクリプトは特定の環境変数VAR1を使用して評価しますos.environ['VAR1']IronPythonの埋め込みと環境変数の上書き

スクリプトを実行する前に一時的に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

まあ、私はまだ上記のコードは動作しない理由はわかりませんが、1つは、単純に実際のコードを実行する前に変数を設定Pythonコードを実行することにより、Python環境での環境変数を設定することができます

engine.CreateScriptSourceFromString("import os\nos.environ['VAR1'] = 'NEW_VALUE'").Execute(); 
var CodeIReallyWantToRun = engine.CreateScriptSourceFromFile(...); 
CodeIReallyWantToRun.Execute(); 
関連する問題