プログラミングなど

2009年5月17日日曜日

C# + Python embedding ファイルの変数のやりとり

Pythonファイルとのやりとりの例

■.NET Framework2.0 sp1
■IronPython 2.0

---- コード(Python側) ----

result = param1 + param2


---- コード(C#側) ----

using System;

using IronPython;
using IronPython.Hosting;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;

...

  public static void Main(string[] args)
  {
   try
   {
    ScriptEngine engine = Python.CreateEngine();
    ScriptScope scope = engine.CreateScope();

    // C#と変数のやり取りをするPythonのファイルを設定
    ScriptSource source =
     engine.CreateScriptSourceFromFile("test.py");

    // Python側の変数に値を設定
    scope.SetVariable("param1", 1);
    scope.SetVariable("param2", 10);
    
    // 実行
    source.Execute(scope);
    
    // 実行後のPython側の変数値を取得
    
    // 結果を出力 ==> 1
    object arg1 = scope.GetVariable("param1");
    System.Console.WriteLine(arg1);
    // 結果を出力 ==> 10
    object arg2 = scope.GetVariable("param2");
    System.Console.WriteLine(arg2);
    // 結果を出力 ==> 11
    object res = scope.GetVariable("result");
    System.Console.WriteLine(res);
   }
   catch (Exception ex)
   {
    System.Console.WriteLine("Error:"
     + ex.Message.ToString());
   }
  }

================================

C#で Pythonファイル(test.py)内の変数の値の設定、取得を行います。

Python側では、あらかじめ変数に値が設定されている必要はありません。

C#で Python側の変数param1, param2 に、それぞれ値を設定し、Python側が実行された後、ython側の計算結果のresult変数をC#で取得しています。

0 件のコメント:

コメントを投稿