Python LanguagePythonをC#から呼び出す


前書き

このドキュメントでは、C#とPythonスクリプト間のプロセス間通信の実装例を示します。

備考

上記の例では、NuGetマネージャを介してインストールできるMongoDB.Bsonライブラリを使用してデータがシリアライズされてます。

それ以外の場合は、任意のJSON直列化ライブラリを使用できます。


以下に、プロセス間通信の実装手順を示します。

  • 入力引数はJSON文字列にシリアル化され、一時的なテキストファイルに保存されます:

     BsonDocument argsBson = BsonDocument.Parse("{ 'x' : '1', 'y' : '2' }"); 
     string argsFile = string.Format("{0}\\{1}.txt", Path.GetDirectoryName(pyScriptPath), Guid.NewGuid());
    
  • Pythonインタプリタpython.exeは、一時テキストファイルからJSON文字列を読み込み、入力引数を取り消すPythonスクリプトを実行します。

     filename = sys.argv[ 1 ]
     with open( filename ) as data_file:  
        input_args = json.loads( data_file.read() )
    
     x, y = [ float(input_args.get( key )) for key in [ 'x', 'y' ] ]
    
  • Pythonスクリプトが実行され、出力辞書がJSON文字列にシリアル化され、コマンドウィンドウに出力されます。

     print json.dumps( { 'sum' : x + y , 'subtract' : x - y } )
    

    ここに画像の説明を入力

  • C#アプリケーションの出力JSON文字列を読み込む:

     using (StreamReader myStreamReader = process.StandardOutput)
     {
        outputString = myStreamReader.ReadLine();
        process.WaitForExit();
     }
    

ここに画像の説明を入力

私は、Excelスプレッドシートから直接Pythonスクリプトを呼び出すことができる私のプロジェクトの1つで、C#とPythonスクリプト間のプロセス間通信を使用しています。

このプロジェクトではExcelバインディングをC# - Excelバインディングに使用しています。

ソースコードはGitHub リポジトリに保存されています

以下は、プロジェクトの概要を説明し、4つの簡単な手順を開始するのに役立つWikiページへのリンクです

私はあなたがその例とプロジェクトが役に立つことを願っています。


PythonをC#から呼び出す 関連する例